USD Форматирование валюты в Java

В Java, как я могу эффективно конвертировать float, такие как 1234.56 и подобные BigDecimals в строки, такие как $1,234.56

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

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

Я также хочу сделать это с помощью Float и BigDecimal.

Ответ 1

Там языковая чувствительность, которая работает хорошо:

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

Ответ 2

DecimalFormat moneyFormat = new DecimalFormat("$0.00");
System.out.println(moneyFormat.format(1234.56));

Ответ 3

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

Вывод программы составляет $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);
    }
}