Как печатать отформатированные BigDecimal значения?


у меня есть BigDecimal поле amount, который представляет собой деньги, и мне нужно, чтобы напечатать его значение в браузере в формате 3.00,.50,.33.

как я могу это сделать?

(единственное простое решение, которое я вижу себя становится floatValue С BigDecimal и затем с помощью NumberFormat для того чтобы сделать двухразрядную точность для части части).

5 75

5 ответов:

public static String currencyFormat(BigDecimal n) {
    return NumberFormat.getCurrencyInstance().format(n);
}

Он будет использовать ваш язык, чтобы выбрать символ валюты. NumberFormat по документации

установить разделитель тысяч, скажем 123,456.78 вы должны использовать DecimalFormat:

     DecimalFormat df = new DecimalFormat("#,###.00");
     System.out.println(df.format(new BigDecimal(123456.75)));
     System.out.println(df.format(new BigDecimal(123456.00)));
     System.out.println(df.format(new BigDecimal(123456123456.78)));

вот результат:

123,456.75
123,456.00
123,456,123,456.78

хотя я поставил #,###.00 Маска, он успешно форматирует более длинные значения тоже. Обратите внимание, что разделитель запятой (,) в результате зависит от вашей локали. Это может быть просто пробел () для русского языка.

еще один способ, который может иметь смысл для данной ситуации составляет

BigDecimal newBD = oldBD.setScale(2);

Я просто говорю это, потому что в некоторых случаях когда речь заходит о деньгах, выходящих за пределы 2 десятичных знаков не имеет смысла. Сделав этот шаг дальше, это может привести к

String displayString = oldBD.setScale(2).toPlainString();

но я просто хотел выделить метод setScale (который также может принимать второй аргумент режима округления для управления тем, как обрабатывается последний десятичный знак. В некоторых ситуациях Java заставляет вас укажите этот метод округления).

 BigDecimal pi = new BigDecimal(3.14);
 BigDecimal pi4 = new BigDecimal(12.56);

 System.out.printf("%.2f",pi);

// выведет 3.14

System.out.printf("%.0f",pi4);

// печать 13

BigDecimal(19.0001).setScale(2, BigDecimal.RoundingMode.DOWN)