Javascript浮動小数点積演算に複数の小数点以下の解決方法が現れます。


Javascriptは浮動小数点の積演算を行っていますが、多位小数の場合があります。これは演算の際にまず浮動小数点をバイナリに変換して演算しますが、ある小数点はバイナリ符号化後に無限ループが発生して、計算に誤差が発生しました。他の言語にも同様の問題があります。原因説明は百度から知っています。例えば、108.1-100108.1=1001000110011001100110011001100を求めます。1000=1111101000 108.1をバイナリに変換すると無限循環小数になります。1100は循環節です。近似値しか取れません。誤差はここで発生した場合、ブラウザバージョンが高いです。tofixed()の方法でNumberを四捨五入して小数点以下の数字を指定できます。解決策:保持する小数点以下の桁数(例えば4)によって、積を計算する際に(10^4)を掛け、計算結果を割ります(10^4)。最後に結果に対して近似値Math.round
 
var m1 = 2232.00,
percent = (10/100),
total = percent*m1;
alert(total);//223.20000000000002

total = Math.round(total*10)/10;
alert(total);//223.2
を取ります。