ホームページ >ウェブフロントエンド >jsチュートリアル >jsの小数点以下の桁数が多い問題を解決する方法

jsの小数点以下の桁数が多い問題を解決する方法

PHPz
PHPzオリジナル
2016-05-16 15:37:212902ブラウズ

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 ビデオ チュートリアル をご覧ください。

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