Board logo

标题: Excel知识兴趣点五十六:Excel浮点运算误差 [打印本页]

作者: zhendeaini    时间: 2015-3-10 09:26     标题: Excel知识兴趣点五十六:Excel浮点运算误差

前面我们讨论了Excel强大的功能,了解了Excel在日常工作中给我们带来了极大的方便,那么看似“完美”的Excel,到底有哪些“不足”的地方呢?
各位童鞋可以验证一下:
选取单元格A1、B1、C1,其中A1输入=(4.1-4.2)+1,B1输入0.9,C1输入=IF(A1=B1,"相等","不相等"),发现了什么?
C1居然显示“不相等”?

我们会问:天哪,Excel连最强大的、复杂的运算都能处理,这么简单的判断却无法正确处理,到底怎么了?难道是我的电脑出问题了?

没错,这就是一个BUG!一个目前无法解决的BUG!但是可以规避它。

各位,怎么处理,才能让电脑读懂这些简单的运算呢?大家可以思考一下。

附件: Excel浮点运算误差.xls (2015-3-10 09:26, 13.5 KB) / 该附件被下载次数 44
http://hahabbs.w1.luyouxia.net/bbs/attachment.php?aid=125648
作者: seaxin    时间: 2015-3-10 10:09

加上ROUND函数就可以,不过不明白为什么会这样~[42]设置格式也不管用

而且复制数值后=(4.1-4.2)+1计算出来的值居然是0.8999999,真神奇啊,~[42]

[ 本帖最后由 seaxin 于 2015-3-10 10:12 编辑 ]
作者: zhendeaini    时间: 2015-3-10 11:46

引用:
原帖由 seaxin 于 2015-3-10 10:09 发表
加上ROUND函数就可以,不过不明白为什么会这样~[42]设置格式也不管用

而且复制数值后=(4.1-4.2)+1计算出来的值居然是0.8999999,真神奇啊,~[42]
从Excel 95一直到最新版本的Excel 2013,中间好像除了Excel 97做过一次纠正,其他版本这个BUG是一直存在。

详看微软官方解释:http://support.microsoft.com/kb/78113
作者: 匿名    时间: 2015-3-10 15:24

我有时用Int()函数处理。A1=INT(((4.1-4.2)+1)*10+0.5)/10=B2=0.9,不过有点复习,不知是否有问题。[39]
作者: zhendeaini    时间: 2015-3-10 18:50

引用:
原帖由 Guest from 150.48.70.x 于 2015-3-10 15:24 发表
我有时用Int()函数处理。A1=INT(((4.1-4.2)+1)*10+0.5)/10=B2=0.9,不过有点复习,不知是否有问题。[39]
也可以的,[82] 只是你那个表达式写错了,理解你的意思:

                               A1=INT(((4.1-4.2)+1)*10+0.5)/10
                               B2=0.9
                               那么C1=IF(A1-B2=0,"相等","不相等"),C1显示“相等”

也可以按照seaxin的思路:

                               A1=ROUND((4.1-4.2)+1,2)
                               B1=0.9
                               那么C1=IF(A1-B1=0,"相等","不相等"),C1显示“相等”

这样就规避了Excel浮点运算误差这个BUG!请看附件!

附件: Excel浮点运算误差.xls (2015-3-10 18:50, 13.5 KB) / 该附件被下载次数 25
http://hahabbs.w1.luyouxia.net/bbs/attachment.php?aid=125704




欢迎光临 BBS (http://hahabbs.w1.luyouxia.net/bbs/) Powered by Discuz! 6.0.0