Как печатать отформатированные 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 заставляет вас укажите этот метод округления).