Форматирование чисел с плавающей точкой - PullRequest
12 голосов
/ 19 января 2011

У меня есть переменная типа double, мне нужно напечатать ее с точностью до 3 десятичных знаков, но она не должна иметь конечных нулей ...

например.Мне нужно

2.5 // not 2.500
2   // not 2.000
1.375 // exactly till 3 decimals
2.12  // not 2.120

Я пытался использовать DecimalFormatter, я делаю это неправильно?

DecimalFormat myFormatter = new DecimalFormat("0.000");
myFormatter.setDecimalSeparatorAlwaysShown(false);

Спасибо.:)

Ответы [ 3 ]

22 голосов
/ 19 января 2011

Попробуйте шаблон "0.###" вместо "0.000":

import java.text.DecimalFormat;

public class Main {
    public static void main(String[] args) {
        DecimalFormat df = new DecimalFormat("0.###");
        double[] tests = {2.50, 2.0, 1.3751212, 2.1200};
        for(double d : tests) {
            System.out.println(df.format(d));
        }
    }
}

выход:

2.5
2
1.375
2.12
6 голосов
/ 19 января 2011

Ваше решение почти правильное, но вы должны заменить нули '0' в шаблоне десятичного формата на хэши "#".

Так оно должно выглядеть так:

DecimalFormat myFormatter = new DecimalFormat("#.###");

Иэта строка не обязательна (поскольку decimalSeparatorAlwaysShown по умолчанию false):

myFormatter.setDecimalSeparatorAlwaysShown(false);

Вот краткая сводка из javadocs:

Symbol  Location    Localized?  Meaning
0   Number  Yes Digit
#   Number  Yes Digit, zero shows as absent

И ссылка на javadoc: DecimalFormat

4 голосов
/ 19 января 2011

Использовать класс NumberFormat.

Пример:

    double d = 2.5;
    NumberFormat n = NumberFormat.getInstance();
    n.setMaximumFractionDigits(3);
    System.out.println(n.format(d));

Вывод будет 2,5, а не 2,500.

...