Как отобразить число с 2 десятичными запятыми, используя BigDecimal? - программирование
Подтвердить что ты не робот

Как отобразить число с 2 десятичными запятыми, используя BigDecimal?

Я использую BigDecimal для получения некоторых значений цены. Требование - это что-то вроде этого, что когда-либо значение, которое мы получаем из базы данных, отображаемое значение должно иметь 2 десятичных точки.

Например:

полученное значение равно 1 - должно отображаться как 1.00
выбираемое значение равно 1.7823 - должно отображаться как 1.78

Я использую setScale(2, BigDecimal.ROUND_HALF_UP), но все же некоторые места, если данные из БД являются целым числом, то то же самое отображается!

Я имею в виду, если значение 0 из DB отображается только как 0. Я хочу, чтобы это отображалось как 0.00

Спасибо

4b9b3361

Ответ 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 будет работать.