java二进制十进制减法
我想减去2double
个值,我已经尝试了以下代码
double val1 = 2.0;
double val2 = 1.10;
System.out.println(val1 - val2);
我得到的结果是
0.8999999999999999
为了以0.9
的形式获取输出,我使用BigDecimal
进行了如下尝试:
BigDecimal val1BD = new BigDecimal(val1);
BigDecimal val2BD = new BigDecimal(val2);
System.out.println(val1BD.subtract(val2BD));
我得到的结果是
0.899999999999999911182158029987476766109466552734375
然后我试着用BigDecimal.valueOf()
val1BD = BigDecimal.valueOf(val1);
val2BD = BigDecimal.valueOf(val2);
System.out.println(val1BD.subtract(val2BD));
最后我得到的输出是0.9
我的问题是,案例2和;案例3
在案例2中,我为什么得到这样的输出
# 1 楼答案
^{} 使用双值的规范
String
表示,内部使用Double.toString(double)
,这就是为什么在第二种情况下使用0.9
使用^{} 时,它将值转换为
double
值的精确浮点表示,而不使用String
表示例如:
输出:
# 2 楼答案
对于那些来这里寻找BigDecimal其他问题的人(与上述问题无关)。。。 记住为方法提供mathContext以避免某些问题,例如