1. ホーム
  2. javascript

[解決済み] JavaScriptで浮動小数点数の精度を扱うには?

2022-03-14 01:03:34

質問

以下のようなダミーテストスクリプトがあります。

function test() {
  var x = 0.1 * 0.2;
  document.write(x);
}
test();

これは、結果を印刷します 0.020000000000000004 と表示されるはずですが 0.02 (電卓を使う場合)。私が理解した限りでは、これは浮動小数点数の乗算精度のエラーによるものです。

このような場合、正しい結果が得られるような良い解決策をお持ちの方はいらっしゃいますか? 0.02 ? のような関数があることは知っています。 toFixed とか丸めもありですが、本当に切ったり丸めたりせずに全部の数字を印刷したいのです。どなたか素敵でエレガントな解決策をお持ちの方がいらっしゃいましたら教えてください。

もちろん、そうでない場合は10桁程度に丸めますよ。

解き方は?

からの 浮動小数点演算ガイド :

この問題を回避するためには、どうしたらよいでしょうか?

それは、どのような を計算します。

  • 特に、計算結果を正確に足し算する必要がある場合。 金銭を扱う場合は、特殊な小数点を使用します。 のデータ型を使用します。
  • 小数点以下の桁数を表示したくない場合は、単純に を丸めた結果をフォーマットする。 小数点以下の桁数 を表示させます。
  • 10進データ型がない場合、代替案として 整数を使用します。 の計算はすべてセントで行われます。しかし これはより多くの作業を必要とし、いくつかの問題があります。 の欠点があります。

最初の点は、本当に特定の正確さが必要な場合にのみ適用されることに注意してください。 10進数 の動作になります。ほとんどの人はそんなことは必要なく、1/10のような数字でプログラムが正しく動作しないことに苛立っているだけで、1/3で同じエラーが発生しても瞬きもしないことに気づいていないのです。

最初の点が本当に当てはまるのであれば BigDecimal for JavaScript これはエレガントではありませんが、不完全な回避策を提供するのではなく、実際に問題を解決しています。