ホームページ >ウェブフロントエンド >フロントエンドQ&A >JavaScript 操作の精度が失われるとどうなりますか?

JavaScript 操作の精度が失われるとどうなりますか?

PHPz
PHPzオリジナル
2023-04-21 09:13:071627ブラウズ

日常のプログラミングでは、さまざまな数値演算を処理するためにさまざまなプログラミング言語を使用することがよくありますが、その中でも間違いなく最も広く使用されているのは JavaScript です。ただし、複雑な数値計算を扱う場合、極端な場合には演算結果の精度が失われる状況に遭遇することがあります。では、なぜこのようなことが起こるのでしょうか?計算精度の低下を避けるにはどうすればよいでしょうか?

  1. 演算精度が失われる原因
    JavaScript では、演算精度が失われる主な理由の 1 つは、浮動小数点数の不正確さです。 JavaScript の数値型は 64 ビット浮動小数点数表現を使用する Number 型の 1 つだけで、表現できる最大値は 1.7976931348623157e 308、最小値は 5e-324 ですが、計算中は浮動小数点数の 2 進表現は、多くの場合正確に表現できないため、精度が失われます。次の例を見てください:
console.log(0.1 + 0.2); // 0.30000000000000004

バイナリでは 0.1 と 0.2 を正確に表現できないため、JavaScript ではこれらの加算結果が不正確になり、小数点の後に余分な数字が生じます。

  1. 演算精度の低下を回避する方法
    演算精度の低下を回避するにはさまざまな方法がありますが、ここでは一般的な方法をいくつか紹介します。

2.1 計算に整数を使用する
複雑な演算を実行する場合、小数を整数に変換して計算し、最終的に結果を小数に変換できます。たとえば、次のコードでは、0.1 と 0.2 にそれぞれ 10 を掛け、その結果を加算し、最後に結果を 10 で除算できます。

console.log((0.1 * 10 + 0.2 * 10) / 10); // 0.3

2.2 toFixed() 関数を使用します。 JavaScript で
Number 型を使用します。 toFixed() メソッド。指定された精度で数値を 10 進数に変換できます (かっこ内の小数点以下の桁数は保持されます)。たとえば、次のコードでは、toFixed() 関数は小数点以下 2 桁を保持し、最終的に精度 0.30 の浮動小数点数を取得します。

console.log((0.1 + 0.2).toFixed(2)); // 0.30

2.3 精度の拡張
JavaScript の演算精度は、精度の低下を避けるために拡張できます。一般的なアプローチは、小数を整数に変換してから計算を実行することです。もう 1 つのオプションは、JavaScript で BigNumber ライブラリを使用することです。このライブラリは高精度の数値型を提供し、操作の精度を大幅に向上させることができます。たとえば、次のコードでは BigNumber ライブラリを使用して、演算精度の損失の問題を解決できます。

var BigNumber = require('bignumber.js');
var x = new BigNumber("0.1");
var y = new BigNumber("0.2");
console.log(x.plus(y).toString()); // "0.3"

この記事では、JavaScript での演算精度の損失の理由と一般的な回避方法をまとめています。複雑な数値計算を扱う場合は、特定の問題を注意深く分析し、精度の低下を避けるために適切な方法を採用し、プログラムの正確性を確保する必要があります。

以上がJavaScript 操作の精度が失われるとどうなりますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。