Форматирование от двойного до 2 десятичных знаков не работает - PullRequest
1 голос
/ 13 марта 2011

Я хочу округлить этот дубль:

3.499999999999999

до:

3.50

И я уже использовал эти два метода:

DecimalFormat df = new DecimalFormat("0.00");
        double result = Double.valueOf(df.format(input));
        System.out.println(answer);

и

public double round(double input)
    {
        int decimalPlace = 2;
        BigDecimal bd = new BigDecimal(input);
        bd = bd.setScale(decimalPlace,BigDecimal.ROUND_UP);

        return (bd.doubleValue());
    }

Но он продолжает печатать:

3.5

У кого-нибудь есть решение для этого? Потому что я действительно думаю, что это должно работать. Спасибо за вашу помощь.

Ответы [ 4 ]

14 голосов
/ 13 марта 2011

Ваше первое решение действительно очень близко.Просто сделайте это:

    DecimalFormat df = new DecimalFormat("0.00");
    System.out.println(df.format(input));

Причина, по которой ваша версия не работает, заключается в том, что вы берете input double, форматируете его как String с 2dp, но затем конвертируете его обратно вdouble.System.out.println затем печатает double, как обычно, без специальных правил десятичного разряда.

4 голосов
/ 14 марта 2011

Вы можете использовать форматирование printf, которое может быть проще.

System.out.printf("%.2f%n", 3.5);

печать

3.50
1 голос
/ 13 марта 2011

Вы пытались заменить 0 на #?

DecimalFormat df = new DecimalFormat ("#. ##"); System.out.println (df.format (вход));

Согласно здесь # будет преобразовано в 0, если цифра отсутствует

0 голосов
/ 27 февраля 2019

Вы можете использовать класс точности apache commons-math

double result = Precision.round(3.499999999999999, 2);
...