Форматирование доллара США на Java - PullRequest
25 голосов
/ 19 июня 2010

В Java, как я могу эффективно преобразовать числа с плавающей точкой, такие как 1234.56 и аналогичные BigDecimals, в строки типа $1,234.56

Я ищу следующее:

String 12345.67 становитсяСтрока $12,345.67

Я также собираюсь сделать это с Float и BigDecimal.

Ответы [ 3 ]

32 голосов
/ 19 июня 2010

Существует идиома, чувствительная к локали, которая работает хорошо:

import java.text.NumberFormat;

// Get a currency formatter for the current locale.
NumberFormat fmt = NumberFormat.getCurrencyInstance();
System.out.println(fmt.format(120.00));

Если ваша текущая локаль находится в США, println напечатает $ 120,00

Другой пример:

import java.text.NumberFormat;
import java.util.Locale;

Locale locale = new Locale("en", "UK");
NumberFormat fmt = NumberFormat.getCurrencyInstance(locale);
System.out.println(fmt.format(120.00));

Будет напечатано: £ 120,00

8 голосов
/ 19 июня 2010
DecimalFormat moneyFormat = new DecimalFormat("$0.00");
System.out.println(moneyFormat.format(1234.56));
0 голосов
/ 13 сентября 2017

Вот код, соответствующий вашему вводу и выводу: *

Вывод программы составляет $ 12 345,67 как для BigDecimal, так и для числа, и он также работает для float.

import java.math.BigDecimal;
import java.text.DecimalFormat;
import java.text.DecimalFormatSymbols;

public class test {
    public static void main(String[] args) {
        DecimalFormatSymbols symbols = new DecimalFormatSymbols();
        symbols.setGroupingSeparator(',');
        String pattern = "$#,##0.###";
        DecimalFormat decimalFormat = new DecimalFormat(pattern, symbols);
        BigDecimal bigDecimal = new BigDecimal("12345.67");

        String bigDecimalConvertedValue = decimalFormat.format(bigDecimal);
        String convertedValue = decimalFormat.format(12345.67);

        System.out.println(bigDecimalConvertedValue);
        System.out.println(convertedValue);
    }
}
...