`
celebration
  • 浏览: 33967 次
  • 性别: Icon_minigender_1
  • 来自: 北京
最近访客 更多访客>>
社区版块
存档分类
最新评论

浮点数强转整形的问题

阅读更多

        前两天在看PHP的时候看到一本书中提到在由浮点型转换成整形的时候需要注意,因为由于计算机存储的问题会导致某些出人意料的结果。我突然想起来在原来看Java 的时候也有相同的问题,但是以前没有仔细想。既然这里也提到了,就应该好好总结下。以下是我用的例子:

在PHP/Java/C++/C#下我都尝试着运行了下面计算的结果:

(int)(0.1*10)             (int)((0.1+0.7)*10)                    (int)((0.1+0.9)*10)

结果得到的结果都是:1              7             10

对于这个答案我也只能解释第二个的答案,因为在计算机的内部,所有的信息都是以二进制存储的,所以在计算机中不能精确的表示0.1,而只能表示成0.099999....。所以0.1+0.7等于0.799999....,乘以10就是7.999999....,而去整就是截取小数点后的字段,所以得到的答案是7。但是如果以这个理由来解释第一和第三个就又解释不清楚了。

        这个问题问了好些人,也没有给出具体的答案。我估计要彻底理解这个问题,需要从计算机的运算原理入手。其实能否正确理解这个问题的原理并不重要,只要我们知道有这种事情,在编程的时候小心些就好了。尽量避免这种运算,就像永远不要比较浮点数是否相等的道理一样。

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics