为什么值String.valueOf(5.6d + 5.8d)和String.format("%f", 5.6d + 5.8d)不同势?String.valueOf(5.6d + 5.8d)将打印“11.399999999999999”。String.format("%f", 5.6d + 5.8d)将打印“11.400000”。为什么会这样?
2 回答
![?](http://img1.sycdn.imooc.com/54585094000184e602200220-100-100.jpg)
哔哔one
TA贡献1854条经验 获得超8个赞
解释有两个部分。
的结果
5.6d + 5.8d
并不完全是11.4
由于二进制浮点表示、精度和舍入问题;请参阅浮点数学是否已损坏?解释为什么会这样。(不,它没有坏!)String.valueOf
和String.format
输出相同double
值的不同答案的原因归结为各自的规范:对于
valueOf
:“必须为 m 或 a 的小数部分打印多少位数字?必须至少有一位数字来表示小数部分,并且超过这个数字,但只能是唯一区分参数所需的更多数字来自 double 类型的相邻值的值。”
该
double
值接近11.399999999999999
比14.0
这样的输出是前者。对于
format
:“如果转换为'e'、'E'或'f',则精度为小数点分隔符后的位数。如果未指定精度,则假定为6。”
当您四舍五入
11.399999999999999
到小数点后的 6 位精度时,您会得到11.40000000
.
(以上引用来自 Java 9 javadocs。)
添加回答
举报
0/150
提交
取消