Форматирование двойного и не округления
Мне нужно форматировать (а не округлять) 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
Ответы
Ответ 1
Вызовите 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
Ответ 2
Вы можете установить режим округления форматирования на DOWN:
df.setRoundingMode(RoundingMode.DOWN);
Ответ 3
Почему бы не использовать BigDecimal
BigDecimal a = new BigDecimal("10.126");
BigDecimal floored = a.setScale(2, BigDecimal.ROUND_DOWN); // == 10.12
Ответ 4
Вы пробовали 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));
Ответ 5
Если все, что вы хотите сделать, это усечение строки в двух десятичных разрядах, рассмотрите возможность использования только строковых функций, как показано ниже:
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, а затем форматирует обратно в строку.