我想减去2个double值,我尝试了以下代码.
double val1 = 2.0;
double val2 = 1.10;
System.out.println(val1 - val2);
Run Code Online (Sandbox Code Playgroud)
我得到了输出,
0.8999999999999999
Run Code Online (Sandbox Code Playgroud)
为了获得输出,0.9我尝试BigDecimal如下,
BigDecimal val1BD = new BigDecimal(val1);
BigDecimal val2BD = new BigDecimal(val2);
System.out.println(val1BD.subtract(val2BD));
Run Code Online (Sandbox Code Playgroud)
我得到了输出,
0.899999999999999911182158029987476766109466552734375
Run Code Online (Sandbox Code Playgroud)
然后我尝试了 BigDecimal.valueOf()
val1BD = BigDecimal.valueOf(val1);
val2BD = BigDecimal.valueOf(val2);
System.out.println(val1BD.subtract(val2BD));
Run Code Online (Sandbox Code Playgroud)
最后我得到了输出0.9.
我的问题是案例2和案例3有什么区别?
在案例2中为什么我得到这样的输出?
BigDecimal.valueOf(double d) 使用String内部Double.toString(double)使用的double值的规范表示,这就是你0.9在第二种情况下获得的原因.
注意:这通常是将double(或float)转换为BigDecimal的首选方法,因为返回的值等于使用结果构造BigDecimal所产生的值
Double.toString(double).
虽然使用new BigDecimal(0.9)它可以将值转换为值的精确浮点表示,double而无需使用String表示,
将double转换为a
BigDecimal,这是double的二进制浮点值的精确十进制表示....
注意:
- 这个构造函数的结果可能有点不可预测.
...
例如 :
BigDecimal bd1 = new BigDecimal(Double.toString(0.9));
BigDecimal bd2 = new BigDecimal(0.9);
System.out.println(bd1);
System.out.println(bd2);
Run Code Online (Sandbox Code Playgroud)
输出:
0.9
0.90000000000000002220446049250313080847263336181640625
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
10812 次 |
| 最近记录: |