我有一个方法,需要输入两个double
值。在尝试将它们相加时,当超过某个阈值时,我得到的值是不正确的,因此我开始使用BigDecimal
。
然而,即使使用BigDecimal
,我仍然得到不正确的值?
double value1 = 2789.45;
double value2 = 557.89;
System.out.println(BigDecimal.valueOf(value1 + value2));
输出打印
3347.3399999999997
当应该这样阅读
3347.34
即使value1
和value2
在当前范围之外(它们是在另一个方法中计算的),我该如何正确地处理这个问题?
我应该使用四舍五入吗?
BigDecimal.valueOf
,而应该从一开始就使用BigDecimal
并使用new BigDecimal("2789.45")
、new BigDecimal("557.89")
进行创建。一旦使用了double
字面量,就会引入不精确性。BigDecimal.valueOf
试图将其恢复,但并不总是有效。 - Louis WassermanString
中读取变量,我同意避免双重舍入...但是硬编码它们?这从来不是一个好主意。 - Jordi Castilla