LibreOffice 版本:4.2.8.2 版本 ID:420m0(版本:2)
我有一个简单的电子表格,用于复式记账家庭会计,除了一行之外,它运行良好,在条件格式中,我使用 SUM() 和值 £-23.99、£8.00 和 £15.99。如果结果不为 0,我会看到红色背景,警告我尚未平衡行。提到的行具有红色背景。
查看每个不带货币格式的值,它们都精确到小数点后 20 位(例如 -23.9900000000000000000000)。但是,SUM(x,y,z) 的结果仅对该行返回 3.6E-015。所有其他行都很好。如果我在不同的行上重复相同的数据集,我会得到相同的错误。这些数字有什么“特别”之处?
显然,我可以通过四舍五入结果来修补它,但我想知道它是否是一个已知的错误?
答案1
您看到的是二进制转换错误。这些数字在某个中间点以二进制形式存储在处理器和/或 RAM 中,并转换回十进制进行比较(或转换为二进制进行比较),这会导致最后几位小数出现差异,而这些差异可以用(最有可能)32 位有符号浮点值表示。这不是 Libre Office Calc 中的错误;而是在二进制机器上进行十进制运算的固有限制。