欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

关于 (0.1+0.7)*10 取整的结果引出的问题 浮点精度特殊进度转化 

程序员文章站 2022-04-15 11:30:01
...
1. echo intval((0.1+0.7)*10);  //输出结果为 7
上边的例子可能细心都看到过,也有这样的解释:
关于 (0.1+0.7)*10 取整的结果引出的问题
            
    
    
        浮点精度特殊进度转化 
到目前为止,可能大家都能理解,因为 float 转换 int ,精度丢失是很正常的事情。
但是简单的解释并没有满足我的好奇心,当我做了以下的例子,开始不解了:

1. 1,echo intval((0.2+0.6)*10); // 8
2. 2,echo intval((0.3+0.5)*10); // 8
3. 3,echo intval((0.4+0.4)*10); // 8
4.
5. 4,echo intval((0.1+0.8)*10); // 9
6. 5,echo intval((0.2+0.7)*10);  // 9
7. 6,echo intval((0.1+0.6)*10);  // 7
8. 7,echo intval((0.0+0.7)*10);  // 7
9. 8,echo intval(0.8*10);        // 8
10. 9,echo intval((0.1+0.2)*10);  // 3
上边的例子 为什么 唯独 (int)((0.1+0.7)*10) 的结果这么特殊? 也许你可能会这样解释:
0.1+0.7 实际上等于 0.79
那么0.2+0.6,0.3+0.5 为什么不是 0.79.. 呢? 还有其他的 0.1+0.8,0.2+0.7 为什么不是0.89呢?
那么引出来最终的问题,为什么0.1 + 0.7 这么特殊
  • 关于 (0.1+0.7)*10 取整的结果引出的问题
            
    
    
        浮点精度特殊进度转化 
  • 大小: 45.5 KB