在Java here中舍入小数有一个很好的问题。但我想知道如何在我的程序中包含尾随零来显示价格,如:$ 1.50,$ 1.00
的简单解决方案
String.format("%.2g%n", 0.912385);
工作正常,但如果它在最后一个小数位,则省略尾随零。即使我只使用这样的表达式,问题出现在我的程序中:
double price = 1.50;
当我使用不同的价格(加,乘等)进行计算时,结果主要显示如下:
$2.5000000000000003
因此,使用String.format可以正常工作,但它会将上面的示例截断为
$2.5
是否有正确的方法在第二个小数位显示尾随零?如果计算的输出应为
,则两者都为零$2.00
答案 0 :(得分:19)
我建议您这样做:
NumberFormat currencyFormatter = NumberFormat.getCurrencyInstance();
double price = 2.50000000000003;
System.out.println(currencyFormatter.format(price));
这具有特定于语言环境的优点。例如,如果您在欧元区而不是美国,这将有效。
答案 1 :(得分:14)
虽然其他人的答案完全有效(尤其是duffymo的答案),但是比格式化显示器有更大的问题。您实际上使用完全错误类型的金额是离散值。您应该考虑使用java.lang.BigDecimal
。
double
(编辑:......或者在评论中指出duffymo实施良好的Money类,例如JScience的monetary模块中的类或更新的Joda-Money - 仍然有待发布作为正式版。)
答案 2 :(得分:11)
可以使用String.format(...)完成,但您可以使用DecimalFormat
:
double price = 2.50000000000003;
DecimalFormat formatter = new DecimalFormat("$0.00");
System.out.println(formatter.format(price)); // print: $2.50
答案 3 :(得分:4)
你试过了吗?
String s = String.format("$%.2f", 2.50);
这样就可以了。
答案 4 :(得分:0)
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;
}