交易余额累计公式产生多余小数位问题咨询
更新:已解决
这其实不是严重问题,只是有点烦人。更多信息见下方引用内容。如果您也为此困扰,我已发布解决方案。
我有一个支票账户登记表格,用来跟踪交易并累计余额,示例如下:
| 支票号 | 日期 | 描述 | 金额 | 已清算 | 余额 |
|---|---|---|---|---|---|
| 12/01 | 初始金额 | $50.00 | 是 | $50.00 | |
| 12/02 | 存款 | $10.00 | 是 | $60.00 | |
| 123 | 12/03 | 购物 | -$10.54 | 是 | $49.46 |
"余额"列需要累加或减去上一笔交易的金额,让每笔新交易都显示当时的当前余额。但我试了两个公式,结果都出现大量多余小数位。虽然把列格式设为货币后显示正常,但单元格存储的实际数据通常带有多余小数位。
比如:$49.46设为货币格式后显示正常,但单元格内实际存储的数据可能是49.455、49.45500000001或49.455999999999这类数值。
我发现有3条"金额"记录输入错误,带有三位小数。修正这些错误后,"余额"列中带三位小数的数值恢复正常,但仍存在类似.xx0000000000x或.xx9999999999x的长小数位数值。
我搜索后发现这可能是浮点数(Floating Point)运算导致的,现在对其有了大致了解。
我后来了解到这是正常现象,确实是浮点数(FP)运算的结果,详情见下文。
我尝试的两个公式如下:
={"Balance"; ARRAYFORMULA( IF( ISBLANK(C2:C)*ISBLANK(D2:D),, SCAN( 0,D2:D, LAMBDA( runningTotal, currentAmount, runningTotal+currentAmount ) ) ) ) }
={"Balance"; ARRAYFORMULA( IF( ISBLANK(C2:C)*ISBLANK(D2:D),, SUMIF( ROW(D2:D), "<="&ROW(D2:D), D2:D ) ) ) }
我有三个相关问题:
- 在数千笔交易(我有近9000笔)中,这会影响精确到分的计算准确性吗?已解决
- 如果会,最佳解决方法是什么?已解决
- 即使完全准确,有没有简单的修复方法让我不再为此烦恼?哈哈 请查看已发布的解决方案
提前感谢各位!
有问题的单元格已用橙色高亮显示。由于货币格式,它们表面显示正常,但点击单元格后会看到数据带有多余小数位。
正如下方评论指出的,浮点数(FP)运算在这类场景中有时被称为浮点数错误,但实际上并非错误。
类似.xx0000000000x或.xx9999999999x的长小数位只是浮点数运算的正常现象,不会影响最终计算准确性。
如果您也对此感到困扰,我发布的半美化修复方案可以解决问题,感谢大家!
内容的提问来源于stack exchange,提问作者Computer Candy

