Для получения строки ровно с двумя цифрами после «.» Я могу сделать что-то вроде:
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
.