ホームページ > 記事 > ウェブフロントエンド > js浮動小数点計算の問題を詳しく解説
JavaScript には Number
という数値型が 1 つだけあり、JavaScript 内のすべての数値は IEEE-754 標準形式で表されます。 浮動小数点数の精度の問題は JavaScript に固有のものではありません。10 進数によっては 2 進数で表現される桁数が無限であるためです: Number
,而且在Javascript中所有的数字都是以IEEE-754标准格式表示的。 浮点数的精度问题不是JavaScript特有的,因为有些小数以二进制表示位数是无穷的:
0.1 0.0001100110011001100110011001100110011001100110011001101 0.2 0.001100110011001100110011001100110011001100110011001101 0.3 0.010011001100110011001100110011001100110011001100110011 0.5 0.1 0.6 0.10011001100110011001100110011001100110011001100110011
所以比如 1.1
1.09999999999999999したがって、たとえば、
1.1
の場合、プログラムは実際には '1.1' を表すことができません。ある程度の精度しか得られず、精度の低下は避けられません:
输入 输出1.0-0.9 == 0.1 False1.0-0.8 == 0.2 False1.0-0.7 == 0.3 False1.0-0.6 == 0.4 True1.0-0.5 == 0.5 True1.0-0.4 == 0.6 True1.0-0.3 == 0.7 True1.0-0.2 == 0.8 True1.0-0.1 == 0.9 TrueJavaScript では問題はより複雑になります。ここに Chrome でのテスト データをいくつか示します:
(1.0-0.9).toFixed(digits) // toFixed() 精度参数须在 0 与20 之间(1.0-0.9).toFixed(10)== 0.1 // 结果为True(1.0-0.8).toFixed(10)== 0.2 // 结果为True(1.0-0.7).toFixed(10)== 0.3 // 结果为True(11.0-11.8).toFixed(10) == -0.8 // 结果为TrueparseFloat((1.0-0.9).toFixed(10)) === 0.1 // 结果为TrueparseFloat((1.0-0.8).toFixed(10)) === 0.2 // 结果为TrueparseFloat((1.0-0.7).toFixed(10)) === 0.3 // 结果为TrueparseFloat((11.0-11.8).toFixed(10)) === -0.8 // 结果为True解決策
以上がjs浮動小数点計算の問題を詳しく解説の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。