F3是通过公式计算出来的,但你就是用计算器算8.275*9100,结果也是75302.5,只有1位小数,根本不存在隐含大量小数的问题!
这应该是浮点运算造成的,你点在前面一个单元格看看,这个数是小于75302.5的,可能只有75302.4999……这样子。
选择公式中的部分D3*E3,按F9,得到下图
果然是这样。
是这里形成的,所以说在计算过程中的数据要取有效位数,不要到最后一个数据才取。
我的每一个单元格都是“常规”格式,没有做任何格式修饰,不存在显示误区
追答这不是你哪里错了,是程序的问题,对于小数运算,计算机是将十进制数转为二进制数运算,再将运算结果从二进制转为十进制,转换过程中会存在误差,也称为浮点运算,这个是程序无法避免的,而整数运算不会有这种误差。WPS在这里没发现这个问题,并不是不存在这个问题,换些其它数据也会有的。
所以,如果有多级引用计算结果的公式,要在中间过程中的公式,对小数位数进行修约。
阁下解释非常专业,谢谢。
但我这案例最多才三位小数,微软怎么能连这种程度的问题都搞不定啊?
这不是微软的事,涉及到计算机的计算原理的事情。有时候我们看似简单的问题,但操作起来是非常难的。
追问唉,那以后类似的问题会防不胜防,根本不知道哪里会出”意外“,睡觉都要不踏实了。
追答没这么严重,设计公式时,养成一个良好习惯,对于有小数的运算,中间用ROUND函数来修约一下。怕影响结果,小数位可多取点。
其实按照标准,中间过程的数据,纯加减的,应该只比结果多一位小数;含乘除的,应该按最少位数来取的,但这点我们在平时是从来都不执行的,都是任由计算机去算。
受教了,非常感谢!
的确有办法使结果正确,但就是不明白错误的原因是什么?
再说了,为什么用WPS就没有这些问题?
我也使用了多台电脑,多个版本的EXCEL来试验,结果都是错的!
刚刚5055大神也说了。这是计算机浮点运算造成的误差。
具体原因及方法可以看这
http://support.microsoft.com/kb/214118/zh-cn