Как печатать отформатированные BigDecimal значения?
у меня есть BigDecimal
поле amount
, который представляет собой деньги, и мне нужно, чтобы напечатать его значение в браузере в формате 3.00
,.50
,.33
.
как я могу это сделать?
(единственное простое решение, которое я вижу себя становится floatValue
С BigDecimal
и затем с помощью NumberFormat
для того чтобы сделать двухразрядную точность для части части).
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 заставляет вас укажите этот метод округления).