Форматирование двойного и не округления - PullRequest
12 голосов
/ 19 декабря 2011

Мне нужно отформатировать (а не округлить) double до 2 десятичных знаков.

Я пытался с:

String s1 = "10.126";
Double f1 = Double.parseDouble(s1);
DecimalFormat df = new DecimalFormat(".00");
System.out.println("f1"+df.format(f1));

Результат:

10.13

Но мне нужно, чтобы результат был 10.12

Ответы [ 5 ]

19 голосов
/ 19 декабря 2011

Позвоните setRoundingMode, чтобы установить RoundingMode соответственно:

String s1 = "10.126";
Double f1 = Double.parseDouble(s1);
DecimalFormat df = new DecimalFormat(".00");
df.setRoundingMode(RoundingMode.DOWN); // Note this extra step
System.out.println(df.format(f1));

Выход

10.12
8 голосов
/ 19 декабря 2011

Вы можете установить режим округления форматера на ВНИЗ :

df.setRoundingMode(RoundingMode.DOWN);
1 голос
/ 19 декабря 2011

Почему бы не использовать BigDecimal

BigDecimal a = new BigDecimal("10.126");
BigDecimal floored = a.setScale(2, BigDecimal.ROUND_DOWN);  //  == 10.12
0 голосов
/ 19 декабря 2011

Если все, что вы хотите сделать, это обрезать строку до двух десятичных знаков, рассмотрите возможность использования только функций String, как показано ниже:

String s1 = "10.1234";
String formatted = s1;
int numDecimalPlaces = 2;
int i = s1.indexOf('.');
if (i != -1 && s1.length() > i + numDecimalPlaces) {
    formatted = s1.substring(0, i + numDecimalPlaces + 1);
}
System.out.println("f1" + formatted);

Это экономит при разборе в Double и последующем форматировании обратно в String..

0 голосов
/ 19 декабря 2011

Вы пробовали RoundingMode.FLOOR ?

String s1 = "10.126";
Double f1 = Double.parseDouble(s1);
DecimalFormat df = new DecimalFormat(".00");
df.setRoundingMode(RoundingMode.FLOOR);

System.out.println("f1"+df.format(f1));
...