Как отобразить число с 2 десятичными запятыми, используя BigDecimal?
Я использую BigDecimal для получения некоторых значений цены. Требование - это что-то вроде этого, что когда-либо значение, которое мы получаем из базы данных, отображаемое значение должно иметь 2 десятичных точки.
Например:
полученное значение равно 1 - должно отображаться как 1.00
выбираемое значение равно 1.7823 - должно отображаться как 1.78
Я использую setScale(2, BigDecimal.ROUND_HALF_UP)
, но все же некоторые места, если данные из БД являются целым числом, то то же самое отображается!
Я имею в виду, если значение 0 из DB отображается только как 0. Я хочу, чтобы это отображалось как 0.00
Спасибо
Ответы
Ответ 1
BigDecimal неизменен, любая операция над ним, включая setScale (2, BigDecimal.ROUND_HALF_UP), создает новый BigDecimal. Правильный код должен быть
BigDecimal bd = new BigDecimal(1);
// bd.setScale(2, BigDecimal.ROUND_HALF_UP); bd.setScale does not change bd
bd = bd.setScale(2, BigDecimal.ROUND_HALF_UP);
System.out.println(bd);
Выход
1.00
Ответ 2
вы можете использовать формат округления
BigDecimal bd - new BigDecimal(2.22222);
System.out.println(bd.setScale(2,BigDecimal.ROUND_UP));
Ответ 3
Вам нужно использовать что-то вроде NumberFormat
с соответствующей локалью для format
NumberFormat.getCurrencyInstance().format(bigDecimal);
Ответ 4
Для форматирования чисел в JAVA вы можете использовать:
System.out.printf("%1$.2f", d);
где d - ваша переменная или число
или
DecimalFormat f = new DecimalFormat("##.00"); // this will helps you to always keeps in two decimal places
System.out.println(f.format(d));
Ответ 5
BigDecimal.setScale будет работать.