保持交易运行余额的列公式正在产生额外的小数位

问题描述 投票:0回答:1

我有一张支票账户登记表来跟踪已清算的交易。它还保持运行平衡。例如...

检查# 日期 描述 金额 已清除 平衡
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% 准确,是否有一个简单的修复方法,以免它让我太恼火?哈哈

提前谢谢您!

google-sheets floating-point array-formulas currency decimal-point
1个回答
0
投票

我不确定这是否是 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
   )
  )
 )
}
© www.soinside.com 2019 - 2024. All rights reserved.