如何正确显示最高两位小数(美分)的价格,包括Java中的尾随零?

这里有一个关于在Java中舍入小数的好问题。 但我想知道如何在我的程序中包含尾随零以显示价格:$ 1.50,$ 1.00

简单的解决方案

String.format("%.2g%n", 0.912385); 

工作正常,但如果它在最后一个小数位,则省略尾随零。 即使我只使用这样的表达式,问题出现在我的程序中:

 double price = 1.50; 

当我使用不同的价格(添加,乘法等)进行计算时,结果主要显示如下:

 $2.5000000000000003 

因此,使用String.format可以正常工作,但它会将上面的示例截断为

 $2.5 

是否有正确的方法在小数点后第二位显示尾随零? 如果计算的输出应该是,则两个都为零

 $2.00 

我建议你这样做:

 NumberFormat currencyFormatter = NumberFormat.getCurrencyInstance(); double price = 2.50000000000003; System.out.println(currencyFormatter.format(price)); 

这具有特定于语言环境的优点。 例如,如果您在欧元区而不是美国,这将有效。

虽然其他答案是完全有效的(尤其是duffymo的答案),但是比格式化显示器有更大的问题。 实际上,您使用完全错误的类型作为离散值的金额。 你应该考虑使用java.lang.BigDecimal而不是double

(编辑:……或者正如duffymo在评论中指出的一个很好实现的Money类,例如来自JScience 货币模块的类或更新的Joda-Money – 它仍然作为官方版本发布。)

它可以用String.format(…)完成,但你可以使用DecimalFormat

 double price = 2.50000000000003; DecimalFormat formatter = new DecimalFormat("$0.00"); System.out.println(formatter.format(price)); // print: $2.50 

你有没有尝试过:

 String s = String.format("$%.2f", 2.50); 

那就行了。

 public static String getFormattedData(String actualString) { String subString = "0.0"; if(actualString.contains(".")) { subString = actualString.substring(actualString.indexOf("."), actualString.trim().length()); if(Double.parseDouble(subString) > 0.0) return actualString; else actualString = actualString.substring(0, actualString.indexOf(".")); } return actualString; }