将双精度值格式化为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
将起作用。它可能会返回货币代码作为格式化结果的一部分,如果在不同的地区查看相同的数据,这可能会产生很大的误导