为什么Google Spreadsheets说零不等于零?


8

在花了几个小时试图找出我的个人会计电子表格中的错误之后,我可以将其固定为一个公式。

虽然这导致零

=((0,6-0,3-0,4)+(-0,3+0,8-0,4))

与零比较给我错

=((0,6-0,3-0,4)+(-0,3+0,8-0,4))=0

我到底想念什么?


2
您从未遇到过浮点数学的乐趣吗?
ale

1
是的,我(用更糟糕的方式)使用了Javascript。但是Google Spreeadsheets数学计算不是在服务器端进行的吗?
bruno

大概。恐怕我没有答案。我只是觉得有点可笑,这是另一个域0 != 0
ale

1
也许您可以检查它是否小于或等于最小数字。
aparente001

“花试图找出在我个人的会计电子表格错误小时后” -爱:d高兴我不是唯一的人谁浪费时间这种方式;)
在线

Answers:


6

多亏了浮点运算的奇迹,

((0.6-0.3-0.4)+(-0.3+0.8-0.4))

双精度计算结果约为-5.55e-17。这在JavaScript和Google Spreadsheets中均适用。计算是在客户端还是在服务器端并不重要:重要的是所使用的数字格式。看来Google表格使用双精度

解决方法是相同的:避免对浮点数进行相等比较。在您的情况下,通过将所有内容乘以10来更改单位可以避免此问题。


1
我之所以提到“服务器端”,是因为Google可以使用服务器中喜欢的编程语言,使用任意精度的十进制数字类型。
bruno 2015年

有一个平台使用小数而不是二进制浮点:HP48S。我计算出实际的十进制数字存储在4位数据包中,所以这很浪费,因为不是所有4位组合都使用。我记得我曾尝试过直接更改内存,甚至使数字超过9的尝试
。– Heimdall

我的解决方案是=FLOOR(B3+C2, 0.01)使用货币
NonlinearFruit
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.