JavaScriptの小数点以下の加算、減算、乗算、除算における小数点以下の桁数の問題については、私自身で勉強し、関連するテストを行ったので、困っている友人が参考にすることができます。
興味深いテストを共有しましょう:
0.1 0.2 == 0.3 //false
私は突然落ち込んでしまいました、わかりました! 0.1 0.2 は次のようになります: 0.30000000000000004
別の 2.4/0.8 => 2.9999999999999996 これを変更して整数 (2.4 * 100)/(0.8 * 100)
10.22 に変換する方法はありません。結果を得るには 0.11 を減算する必要があります。値 10.110000000000001 には多くの小数が含まれていたため、toFixed メソッドを使用して小数をフィルタリングしましたが、以前の変換方法よりもどちらが効率的であるかわかりません。整数に変換して実行します。もう一度試してみましょう!
var date1 = new Date(); for(var i = 0; i < 10000; i++){ var result1 = (10.22 - 0.11).toFixed(2); } alert(new Date() - date1);//效率低 var date2 = new Date(); for(var j = 0; j < 10000; j++){ var result2 = (10.22 * 1000 - 0.11 * 1000) / 1000; } alert(new Date() - date2);//效率高 alert(0.1 + 0.2 == 0.3); //既然返回false alert(0.1 + 0.2); //既然返回0.30000000000000004 alert(parseFloat(0.1) + parseFloat(0.2)); //还是返回0.30000000000000004
いくつかの情報を確認しました。1 つは JavaScript の浮動小数点計算のバグで、もう 1 つはコンピュータの最終的な 2 値計算への変換に関するものでしたが、なぜすべての小数ではないのですか?この現象は常に発生します。時間があるときに詳しく調べます。
解決策:
この問題を解決するには 2 つの方法があります。1 つは、JavaScript の toFixed(n) メソッドを使用して小数点以下 N 桁を直接取得する方法です。 , ただし、個人的にはこの方法ではデータの精度に若干の問題があると感じています。データの精度要件が高くない場合に使用できます。
alert((0.1 + 0.2).toFixed(1));
2 番目の方法は、計算メソッドを自分で記述する方法です。以下はカスタム加算関数です。この方法を使用して加算すると、上記の問題を回避できます。
//自定义加法运算 function addNum (num1, num2) { var sq1,sq2,m; try { sq1 = num1.toString().split(".")[1].length; } catch (e) { sq1 = 0; } try { sq2 = num2.toString().split(".")[1].length; } catch (e) { sq2 = 0; } m = Math.pow(10,Math.max(sq1, sq2)); return (num1 * m + num2 * m) / m; } alert(addNum(0.1, 0.2));
もちろん、alert((num * 3 10 * 3) /3); のように単純に書くこともできます。場所は表示されません。
alert((num * 3 10 * 3) /3); と、alert(num 10); コンピューターが最下位レベルで二項演算に変換する際の違いは、おそらくこれです。上記の問題の理由、またはそれを詳しく調査する必要があるので、さらに話し合ってください。
上記はこの章の全内容です。その他の関連チュートリアルについては、JavaScript ビデオ チュートリアル をご覧ください。