Для получения строки с ровно 2 цифрами после "." Я могу сделать что-то вроде:номер печати с двумя цифрами, но круглый с точностью до 6 цифр
DecimalFormat df = (DecimalFormat)DecimalFormat.getInstance(Locale.US);
df.applyPattern("0.00");
df.setRoundingMode(RoundingMode.HALF_UP);
String output = df.format(value);
Когда у меня есть несколько таких, как 828.054999999702d
, он будет отформатировать его в 828.05, что до сих пор правильно, так как следующая цифра говорит «4», и он будет округлять, что до нуля ,
Но что, если мне нужно сохранить точность цифр, просто не хотите его показывать?
То, что я быстро создал этот рабочий код:
double prettyValue = value;
prettyValue = Math.round(prettyValue * 1000000d)/1000000d;
prettyValue = Math.round(prettyValue * 100000d)/100000d;
prettyValue = Math.round(prettyValue * 10000d)/10000d;
prettyValue = Math.round(prettyValue * 1000d)/1000d;
prettyValue = Math.round(prettyValue * 100d)/100d;
DecimalFormat df = (DecimalFormat)DecimalFormat.getInstance(Locale.US);
df.applyPattern("0.00");
df.setRoundingMode(RoundingMode.HALF_UP);
String output = df.format(prettyValue);
Это округлить 6-й, 5-й, 4-й, 3-е, а затем второе место, NumberFormat не придется ничего делать, а просто напечатать 2 оставшихся цифр, после чего будут нули.
Но я думаю, что должно быть уже готовое округление, которое я просто не вижу. Попытка сделать то же самое с BigDecimals приводит к точно такой же проблеме для меня.
В результате я хочу получить 828.054999999702
округленный до 828.06
.
Попробуйте округлить при форматировании вывода. – Thomas
Что делает * «что делать, если мне нужно сохранить больше цифр, просто не хочу его показывать?» * Означает? Что означает форматирование дисплея для сохранения точности? Если ваш форматированный текст является вашим сохранением, вы должны показать все цифры, необходимые для сохранения. Если значение сохраняется в противном случае, какая у вас проблема? Я смущен. – Andreas