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

来源:百度知道 编辑:UC知道 时间:2024/05/14 16:44:39
因工作需要,本人使用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('奖金(分类明细)

这是浮点计算的问题。在做减法运算时,实际要把减数变为负数,再做加法运算,而正数与负数在Excel内部存储的格式是不同的,比如-1,在Excel内部会记为-0.9999999999999999(16个9,比实际的精度多1位),如果是仅进行少量次计算,不会产生误差,但要经过多次运算的话,就会产生的误差。

把算式公式的一列,设置为“保留4位小数”,最后合计或总计格设置为“保留2位小数”,就不会出现你的问题了。

呵呵~~~
也许是你同一列单元格的数据格式不一样,你在EXCEL中你A、B、C、列中(你的数据部分哦),分别选中单列,数据→分列。弹出来的对话框,直接完成就好了,你在试一下,不行的话你加我的QQ我来帮你。365846986

SFSDAF

SFSDAF