Googleスプレッドシートで、ゼロはゼロと等しくないというのはなぜですか?


8

個人の会計スプレッドシートのエラーを理解するために何時間も費やした後、私はそれを1つの数式にピン留めすることができました。

これはゼロになりますが

=((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
浮動小数点演算の喜びに遭遇したことはありませんか?
エール2015

1
はい、私は(悪い方法で)JavaScriptを使用しました。しかし、Google Spreeadsheetsの数学計算はサーバー側で発生しませんか?
ブルーノ2015

多分。残念ながら答えはありません。ここに別のドメインがあるのが少しおかしいと思いました0 != 0
エール2015

1
おそらく、それが最小数以下かどうかを確認できます。
aparente001 2015

「私の会計用スプレッドシートのエラーを理解するために何時間も費やした後」-大好きです:Dこのように時間を無駄にしたのは私だけではないことを嬉しく思います;)
Line

回答:


6

浮動小数点演算の驚異のおかげで、

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

倍精度で約-5.55e-17と評価されます。これは、JavaScriptやGoogleスプレッドシートにも当てはまります。計算がクライアント側であるかサーバー側であるかは問題ではありません。重要なのは、使用される数値形式です。Googleスプレッドシートは倍精度を使用しているようです。

ソリューションは同じです:浮動小数点数の等価比較を避けます。あなたの場合、すべてを10倍して単位を変更すると、問題が回避されます。


1
Googleがサーバー内でお気に入りのプログラミング言語から任意精度の10進数型を使用できるため、「サーバー側」について言及しました。
ブルーノ2015

2進浮動小数点ではなく10進数を使用するプラットフォームHP48Sがあります。実際の10進数字は4ビットのパックに格納されるので、4ビットのすべての組み合わせが使用されるわけではないので無駄です。私は私が直接メモリを変更し、さらに9以上の数字を行うことで実験することを覚えておいてください
HEIMDALL

私の解決策は=FLOOR(B3+C2, 0.01)、通貨を扱うことでした
NonlinearFruit 2018
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.