我一直将BigDecimal用于价格,但是我想知道向用户显示此价格的最佳方法是什么。


使用doubleValue()是个好方法吗?
这两个选项之间有什么区别吗?

最佳答案

使用doubleValue()是个好方法吗?


如果要避免使用double(或者要控制数字的格式),则使用BigDecimal是有意义的。如果将BigDecimaldouble混合使用,我看不到重点。您不妨一直使用double来简化代码。

如果要将值转换为字符串,请使用toString例如

BigDecimal bd = ...
System.out.println("bd: " + bd.toString());


要不就

System.out.println("bd: " + bd);


如果要使用double,可以执行

double d =
System.out.printf("%.2f%n", d); // round to 2 decimal places


为什么BigDecimal可能更容易出错两倍的示例。这两个答案都是错误的,但是在BigDecimal的情况下,无论是代码还是结果看起来都不是很明显

System.out.println(BigDecimal.valueOf(1.00)
                             .divide(BigDecimal.valueOf(49), 2, BigDecimal.ROUND_HALF_UP)
                             .multiply(BigDecimal.valueOf(49)));
System.out.println(1.00 / 49 * 49);


版画

0.98
0.9999999999999999


您可以同时修复这两个代码,但很容易忽略第一种情况下存在问题的事实。提示:使用BigDecimal.valueOf不是问题。代码越冗长(使用的符号越多),则越难于看到重要的细节。

10-06 05:43
查看更多