在Java中将double值格式化为2位小数并获取逗号分隔的货币格式。

3

我正在从事一个项目,需要以以下格式显示价格。

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

我做错了什么吗?
2个回答

8
DecimalFormatNumberFormat对象期望它们的格式化对象是某种数字,而不是像format1这样的字符串,因此会抛出IllegalArgumentException

你已经将一个已经格式化的字符串format1传递给了format,而不是一个数字。像第一次调用时一样,将price传递给format

但是美国地区的NumberFormat不会在小数点后面显示任何数字;你将看到打印的是2,500。如果你想要这两个小数位,你可以明确指定该格式,类似于你构造df的方式。

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

1
你能否不使用 DecimalFormat.setMinimumFractionDigits(2) 来确保始终显示两位小数? - mohammedkhan
是的,使用NumberFormatsetMinimumFractionDigits会起作用。 - rgettman

3

以下是如何设置两个小数点和逗号分隔的方法:

NumberFormat.getCurrencyInstance().format(price);

它可能会在格式化的结果中返回货币代码,如果相同的数据在不同的区域设置中查看,则可能会非常误导。 - Clement Osei Tano

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接