为什么如果我BigDecimal
在这种情况下使用,我没有得到预期的结果?
double value1 = 5.68;
double value2 = 2.45;
System.out.println(BigDecimal.valueOf(value1 + value2));
出口:
8.129999999999999
预期的:
8.13
为什么如果我BigDecimal
在这种情况下使用,我没有得到预期的结果?
double value1 = 5.68;
double value2 = 2.45;
System.out.println(BigDecimal.valueOf(value1 + value2));
8.129999999999999
8.13
发生的事情是你正在做的
double
不是的总和BigDecimal
我推荐这个
这样,
BigDecimal
在执行加法之前,首先将每个数字转换为 a。由于操作符
+
不能与BigDecimal
该方法一起工作,必须使用该方法来.add()
代替使用 时
BigDecimal
,最好始终使用不使用 type 的构造函数和方法double
,因为我假设您已经知道,double
对于许多具有以 10 为底的精确表示的数字,该类型没有精确表示。对于您的示例,您可以使用:
或者可能:
或其他:
请注意,这些构造函数有一个带有附加参数的版本
MathContext
,它允许您选择舍入模式。由于问题是关于使用四舍五入
BigDecimal
,你应该只使用BigDecimal#setScale(int, RoundingMode)
:结果将是:
您可以看到在ideone上运行的示例。
显然,这并不意味着这是进行十进制运算的方式。最好遵循@ninjalj 的答案中给出的示例,如果您要使用十进制数字,请
BigDecimal
使用字符串而不是初始化double
:但是,如果上述操作必须有固定的小数位数,请使用
setScale
.