电子表格excel,计算误差:A-B≠C 但 A=B+C,为什么?

因工作需要,本人使用excel做辅助账,汇总表中奖金余额(单元格F91)应等于分类明细表中奖金余额(收奖明细合计减发奖明细合计),汇总表数据来自财务账的科目余额表,分类明细表的数据来自财务账的明细账,为防止登记辅助账时人为操作录入失误,本人设了以下审核公式:

注:显示结果以书名号引用,即《显示结果》

实际公式:
《=IF(SUMIF('奖金(分类明细)'!F$3:F$133,C91,'奖金(分类明细)'!H$3:H$133)-SUMIF('奖金(分类明细)'!F$3:F$133,C91,'奖金(分类明细)'!G$3:G$133)=F91,"-","×")》

简述公式:=IF(明细表收奖合计-明细表发奖合计=汇总表余额,"-","×")

结果:《×》

本不该错,于是使用“公式求值”功能逐步计算查找原因,前几步计算无误,几步之后出现《if(17683.7-17683=F91,"-","×")》 (正确)

再点“求值”下一步结果:《if(0.700000000000728=F91,"-","×")》

再点“求值”下一步结果:《if(0.700000000000728=0.7,"-","×")》

再点“求值”下一步结果:《if(flase,"-","×")》

再点“求值”下一步结果:《×》

为什么《17683.7-17683》会计算出结果《0.700000000000728》?

于是更改公式如下

实际公式:
《=IF(SUMIF('奖金(分类明细)'!F$3:F$133,C91,'奖金(分类明细)'!H$3:H$133)=SUMIF('奖金(分类明细)'!F$3:F$133,C91,'奖金(分类明细)'!G$3:G$133)+F91,"-","×")》

简述公式:=IF(明细表收奖合计=明细表发奖合计+汇总表余额,"-","×")

结果正确:《-》

不是新手上路,不必多虑以下情况:

1、表中最小小数位0.00,会计专用格式,别说输多小数了;

2、表中没有乘除运算,不该算出0.000000000000728;

不是高人,所以还要请教:

1、为什么A减B本该等于C,可是excel却计算出A-B≠C?

2、为什么excel会计算出《17683.7-17683》=《0.700000000000728》?

3、为什么excel计算A-B≠C,却计算A=B+C?

请高人赐教!!!
awerlasdfwe高人!谢谢!我明白了!

虽然我的理解深度有限,但您说的这些就够我用了!再谢!

以后不用 A - B = C 审核了,只用 A = B + C 审核!

此外,在使用一款个人理财软件时也发现了同样的问题,应该也是这个道理!

这是浮点计算的问题。在做减法运算时,实际要把减数变为负数,再做加法运算,而正数与负数在Excel内部存储的格式是不同的,比如-1,在Excel内部会记为-0.9999999999999999(16个9,比实际的精度多1位),如果是仅进行少量次计算,不会产生误差,但要经过多次运算的话,就会产生的误差。
温馨提示:内容为网友见解,仅供参考
第1个回答  2008-06-29
呵呵~~~
也许是你同一列单元格的数据格式不一样,你在EXCEL中你A、B、C、列中(你的数据部分哦),分别选中单列,数据→分列。弹出来的对话框,直接完成就好了,你在试一下,不行的话你加我的QQ我来帮你。365846986
第2个回答  2013-04-17
把算式公式的一列,设置为“保留4位小数”,最后合计或总计格设置为“保留2位小数”,就不会出现你的问题了。
第3个回答  2008-06-29
SFSDAF
第4个回答  2008-06-28
SFSDAF
相似回答
大家正在搜