发新话题
打印

Excel知识兴趣点五十六:Excel浮点运算误差

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 (13.5 KB)

2015-3-10 09:26, 下载次数: 43

我熱愛生活,我愛我的家人。
http://150.20.8.135/bbs/viewthread.php?tid=210296
加上ROUND函数就可以,不过不明白为什么会这样~[42]设置格式也不管用

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

[ 本帖最后由 seaxin 于 2015-3-10 10:12 编辑 ]
引用:
原帖由 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
我熱愛生活,我愛我的家人。
http://150.20.8.135/bbs/viewthread.php?tid=210296
我有时用Int()函数处理。A1=INT(((4.1-4.2)+1)*10+0.5)/10=B2=0.9,不过有点复习,不知是否有问题。[39]
引用:
原帖由 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 (13.5 KB)

2015-3-10 18:50, 下载次数: 24

我熱愛生活,我愛我的家人。
http://150.20.8.135/bbs/viewthread.php?tid=210296
发新话题
查看积分策略说明

快速回复主题

选项

[完成后可按 Ctrl+Enter 发布]  预览帖子  恢复数据  清空内容