将双精度值格式化为2个小数点,并在Java中获取逗号分隔的货币格式

将双精度值格式化为2个小数点,并在Java中获取逗号分隔的货币格式,java,Java,我在工作的项目,我必须显示以下格式的价格 250 -> 250.00 2500 -> 2,500.00 260500.33 -> 260,500.33 我认为下面的方法可以让这一切顺利,但它不起作用 double price = 2500; DecimalFormat df = new DecimalFormat("#.00"); String format1 = df.format(price); System.out.println(f

我在工作的项目,我必须显示以下格式的价格

250  -> 250.00
2500 -> 2,500.00
260500.33 -> 260,500.33
我认为下面的方法可以让这一切顺利,但它不起作用

    double price = 2500;
    DecimalFormat df = new DecimalFormat("#.00");

    String format1 = df.format(price);
    System.out.println(format1); //250.00

    String format2 = NumberFormat.getNumberInstance(Locale.US).format(format1);// Exception "Cannot format given Object as a Number"
    System.out.println(format2); //excepted 2,500.00

我做错了什么?

DecimalFormat
NumberFormat
对象希望其对象的格式是某种数字,而不是像
format1
这样的字符串,因此会抛出
IllegalArgumentException

您已将已格式化的字符串
format1
传递给
format
,而不是数字。将
price
传递到
format
,就像您第一次调用它时所做的那样

但是美国语言环境
NumberFormat
不会给出小数点以外的任何数字;您将看到打印的
2500
。如果需要这两个十进制数字,可以明确指定该格式,类似于构造
df
的方式

String format2 = new DecimalFormat("#,###.00").format(price);

这是如何设置两个小数点和逗号分隔

NumberFormat.getCurrencyInstance().format(price);

是否可以使用
DecimalFormat.setMinimumFractionDigits(2)
确保始终显示两位小数?是,使用
NumberFormat
setMinimumFractionDigits
将起作用。它可能会返回货币代码作为格式化结果的一部分,如果在不同的地区查看相同的数据,这可能会产生很大的误导