Java - неожиданный результат при округлении double/float до 2 десятичных знаков
Я сталкиваюсь с проблемой при округлении от двух до двух знаков после запятой. Я знаю, что эти вопросы задавались во многих местах. Но мой вопрос немного другой, и я не могу найти его в других местах.
Насколько я знаю, есть 2 способа сделать это.
Math.round(double*100.0)/100.0
DecimalFormat(“###.##”)
Я пытаюсь использовать первый способ: пользовательский способ округлить вдвое. Когда второе десятичное число равно 0, результат будет печатать только первое десятичное число и игнорировать второе.
Например,
Math.round(1.23333*100.0)/100.0
Результат 1,23. Это хорошо работает.Math.round(3.90*100.0)/100.0.
Результат 3,9. Проблема возникает. Я хочу показать 3,90 вместо 3,9Math.round(3*100.0)/100.0
, Результат 4.0. Я хочу 4,00 вместо 4,0
Итак, мой вопрос заключается в том, как я могу иметь двойное значение с 2 десятичными знаками, независимо от того, является ли последнее десятичное число 0 или нет. Я знаю, что могу использовать второй способ DecimalFormat(“###.##”)
добиться того, чего я хочу! Но возможно ли это сделать первым способом?
Изменить: Спасибо за ответы. Похоже, что невозможно использовать метод round() для его достижения. Тем не менее, некоторые люди предлагают использовать комбинацию из 2 способов для достижения этой цели. Но я думаю, используя только DecimalFormat(“###.##”)
могу получить то, что я хочу. Кто-нибудь может это подтвердить?
4 ответа
Вы пробовали следующее?
DecimalFormat(“###.00”)
Если не ошибаюсь, конечные нули оставляются пустыми при использовании знака #.
Я бы предложил использовать String.format("%1$.2f",x). Он округляет значение до указанной точности (2 цифры в нашем примере) и оставляет завершающие нули справа.
System.out.println(String.format("%1$.2f",3.121)) gives 3.12
System.out.println(String.format("%1$.2f",3.129)) gives 3.13
System.out.println(String.format("%1$.2f",3.12)) gives 3.12
System.out.println(String.format("%1$.2f",3.10)) gives 3.10
Вы должны форматировать свой результат с DecimalFormat
DecimalFormat format = new DecimalFormat("0.00");
System.out.println(Math.round(3.90*100.0)/100.0); // 3.9
System.out.println(format.format(Math.round(3.90*100.0)/100.0)); // after using format 3.90
System.out.println(format.format(Math.round(3*100.0)/100.0));
И вывод
3.9
3.90
3.00
Я считаю, что вам нужно использовать комбинацию обоих для достижения ваших потребностей. Округление, чтобы получить число с двумя десятичными знаками, и DecimalFormat
чтобы отобразить его с двумя десятичными знаками.