double类型变量减法赋值后出现非预期值的技术问询
为什么double运算后得到0.89999999999997726而非0.9?
这是IEEE 754双精度浮点数(double类型)的二进制存储特性导致的精度误差,属于浮点数运算的固有现象:
- 十进制小数0.9无法被二进制浮点数精确表示,它在二进制中是无限循环的小数,double类型只能存储它的近似值。
- 代码里的
360.9D,实际存储的并不是精确的360.9,而是一个接近该值的二进制近似值。 - 当减去能被二进制精确存储的整数
360D后,原本隐藏在360.9D里的近似误差被暴露出来,最终得到的就是那个偏离预期0.9的结果。
如果需要精确的十进制数值运算,应该使用专门的高精度十进制处理类型(比如Java中的BigDecimal),避免浮点数的精度问题。
内容的提问来源于stack exchange,提问作者Astro
相关产品推荐
相关产品推荐

