六狼论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

新浪微博账号登陆

只需一步,快速开始

搜索
查看: 58|回复: 0

浮点数强转整形的问题

[复制链接]

升级  36%

4

主题

4

主题

4

主题

童生

Rank: 1

积分
18
 楼主| 发表于 2013-1-27 05:16:56 | 显示全部楼层 |阅读模式
        前两天在看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。但是如果以这个理由来解释第一和第三个就又解释不清楚了。
        这个问题问了好些人,也没有给出具体的答案。我估计要彻底理解这个问题,需要从计算机的运算原理入手。其实能否正确理解这个问题的原理并不重要,只要我们知道有这种事情,在编程的时候小心些就好了。尽量避免这种运算,就像永远不要比较浮点数是否相等的道理一样。
您需要登录后才可以回帖 登录 | 立即注册 新浪微博账号登陆

本版积分规则

快速回复 返回顶部 返回列表