JS で 10 進数の乗算を実行すると浮動小数点エラーが発生します。具体的にテストできます。
<スクリプト>
アラート(11*22.9)
スクリプト>
この問題は多くの人にとって頭の痛い問題でしょう。では、どうすれば解決できるでしょうか?ここに解決策があります。
1.この解決策はさらに面倒ですが、この問題を解決する実際のプロセスの概要を知ることができます。
//戻り値: arg1 を arg2 で除算した正確な結果
function accDiv(arg1,arg2){
var t1=0,t2= 0 ,r1,r2;
try{t1=arg1.toString().split(".")[1].length}catch(e){}
try{t2=arg2.toString(). split (".")[1].length}catch(e){}
with(Math){
r1=Number(arg1.toString().replace(".",""))
r2=Number(arg2.toString().replace(".",""))
return (r1/r2)*pow(10,t2-t1);
}
}
//呼び出しをより便利にするために、Div メソッドを Number 型に追加します。
Number.prototype.div = function (arg){
}
//正確な乗算結果を取得するために使用される乗算関数
//説明: JavaScript の乗算結果にはエラーが発生します。これは、2 つの浮動小数点数を乗算するとより顕著になります。この関数は、より正確な乗算結果を返します。
//戻り値: arg1 と arg2 を乗算した正確な結果
function accMul(arg1,arg2)
{
var m=0 , s1=arg1.toString(),s2=arg2.toString();
try{m =s1.split(".")[1].length}catch(e){}
try{m = s2.split(".")[1].length}catch(e){}
return Number(s1.replace(".",""))*Number(s2.replace(".", " "))/Math.pow(10,m)
}
// 呼び出しをより便利にするために、Number 型に mul メソッドを追加します。
Number.prototype.mul = function (arg){
}
//正確な加算結果を取得するために使用される加算関数
//説明: JavaScript の加算結果にはエラーが含まれます。これは、2 つの浮動小数点数を加算するときにより顕著になります。この関数は、より正確な加算結果を返します。
//戻り値: arg1 と arg2 の正確な結果
function accAdd(arg1,arg2){
var r1,r2,m;
try{r1=arg1.toString().split(".")[1].length}catch(e){r1=0}
try{r2=arg2.toString().split(". ")[1].length}catch(e){r2=0}
m=Math.pow(10,Math.max(r1,r2))
return (arg1*m arg2*m)/ m
}
//呼び出しをより便利にするために、Number 型に add メソッドを追加します。
Number.prototype.add = function (arg){
}