我有一张支票账户登记表来跟踪已清算的交易。它还保持运行平衡。例如...
检查# | 日期 | 描述 | 金额 | 已清除 | 平衡 |
---|---|---|---|---|---|
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。
这两个公式我都试过了...
={"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
)
)
)
}
我已经搜索了可能导致此问题的原因,发现这可能是由于浮点错误或 FPE 造成的。我只浏览了一下,但现在已经明白了。
我对此有三个问题。 1. 这实际上会影响数千笔交易过程中精确到绝对美分的数学准确性吗? 2. 如果是这样,解决这个问题的最佳方法是什么? 3. 即使它保持 100% 准确,是否有一个简单的修复方法,以免它让我太恼火?哈哈
提前谢谢您!
我不确定这是否是 100% 准确的解决方案,但实际单元格中生成的数据(在两位小数“显示”结果后面)现在也位于两位小数。
我所做的就是将 ROUND 函数合并到每个公式中。我列出了我尝试在原始问题中使用的两个公式。以下是添加了 ROUND 函数的这两个选项。 (LAMBDA 版本似乎工作效率更高,纸张负载更少。)
={"Balance";
ARRAYFORMULA(
IF(ISBLANK(C2:C)*ISBLANK(D2:D),,
SCAN(0,D2:D,
LAMBDA(
runningTotal,
currentAmount,
ROUND(runningTotal+currentAmount, 2)
)
)
)
)
}
={"Balance";
ARRAYFORMULA(
IF(ISBLANK(C2:C)*ISBLANK(D2:D),,
SUMIF(
ROW(D2:D),
"<="&ROW(D2:D),
D2:D
)
)
)
}