2016-09-05 7 views
0

私は2つの浮きを減算するつもりですが、私は999998.7799999999なぜですか?これは、実際の結果は、あなたの問題は浮動小数点精度に関係している999998.78Javascript parsefloat悪い減算

Money1="2,000,001.44 $"; 
Money2="1,000,002.66 $" 
Money1= Number(Money1.replace(/[^0-9\.]+/g,"")); 
Money2= Number(Money2.replace(/[^0-9\.]+/g,"")); 
console.log(parseFloat(Money1)-parseFloat(Money2)); 
+0

これは、jQueryのとは何の関係もない、ちょうどバニラJS –

答えて

1

toFixed()は、指数表記を使用し、小数点の後にdigits桁を持つていないnumObjの文字列表現を返します。必要に応じて数値が丸められ、小数部には必要に応じてゼロが埋め込まれ、指定された長さになります。 numObjが1e + 21より大きい場合、このメソッドは単純にNumber.prototype.toString()を呼び出し、指数表記の文字列を返します。

スニペット:

Money1="2,000,001.44 $"; 
 
Money2="1,000,002.66 $" 
 
Money1= Number(Money1.replace(/[^0-9\.]+/g,"")); 
 
Money2= Number(Money2.replace(/[^0-9\.]+/g,"")); 
 
result = (Money1 - Money2).toFixed(2); 
 
console.log(result);

+0

はあなたの先生に感謝:) –

1

です。 hereの説明があります。

1

あなたが望む結果は、Javascriptが生成しているもの(read more about floating point operations in Javascript)の丸みを帯びたものになります。あなたが望むフォーマットを取得するには、結果を自分で丸めることができます。

Money1="2,000,001.44 $"; 
 
Money2="1,000,002.66 $" 
 
Money1= Number(Money1.replace(/[^0-9\.]+/g,"")); 
 
Money2= Number(Money2.replace(/[^0-9\.]+/g,"")); 
 
Rounded = Math.round((parseFloat(Money1)-parseFloat(Money2)) * 100)/100; 
 
console.log(Rounded);