フローティング - ポイントエラーは、JSの小数点の乗算の乗算操作が発生します。
<スクリプト>
アラート(11*22.9)
</script>
結果は、251.9ではなく251.899999999998でした
多くの人の頭痛がなければなりません。それで、それを解決する方法は?ここでは、解決策が与えられます。
1、
次のようにコードコードをコピーします。
<スクリプト>
アラート(11*(22.9*10)/10);
</script>
問題を解決するというおおよその考え方は、因子が最初に整数に拡大され、最終的に対応する倍数で分割され、正しい結果を得ることができるということです。
2、
次のようにコードコードをコピーします。
<スクリプトDefer>
number.prototype.raate = function(){
var os.toString();
if(ostr.indexof( "。")== -1)
返品1;
それ以外
return math.pow(10、parseint(osr.length-organ.indexof( "。");
}
function trans(){
args = trans.arguments;
var test = 1;
for(i = 0; i <args.length; i ++)
temp*= args [i]*args [i] .raate();
for(i = 0; i <args.length; i ++)
temp/= args [i] .raate();
一時を返します
}
アラート(トランス(11,22.9));
</script>
このソリューションはより厄介な方法ですが、おそらくこの問題を解決する実際のプロセスを理解することができます。
また、4つの家の方法を使用して、JSでラウンドを使用して、整数を正確に達成する必要がある場合は、関数を作成する必要があります。 。
次のようにコードコードをコピーします。
関数fordight(dight、how){
Dight = Math.Round(Dight*Math.Pow(10、How))/Math.Pow(10、How);
威厳を返します。
}
//メソッドを削除する正確な方法を取得する方法を除く
//説明:JavaScriptの結果にはエラーがあり、2つのフローティングポイント数値が削除されたときに明らかになります。この関数は、より正確な削除結果を返します。
//コール:accdiv(arg1、arg2)
//返品値:arg1を除くarg2の正確な結果を除く
function accdiv(arg1、arg2){{
var t1 = 0、t2 = 0、r1、r2;
try {t1 = arg1.toString( "。")[1] .length} catch(e){}
try {t2 = arg2.toString( "。")[1] .length} catch(e){}
(数学){
r1 = number(arg1.toString()。置換( "。"、 ""))
r2 = number(arg2.toString()。置換( "。"、 ""))
return(r1/r2)*pow(10、t2-t1);
}
}
// divメソッドを数値タイプに追加します。これは、呼び出しがより便利です。
number.prototype.div = function(arg){
return accdiv(this、arg);
}
//乗算関数正確な乗算結果を取得します
//説明:JavaScriptの乗算結果の結果にはエラーがあり、2つの浮遊点数値が乗算されると明らかになります。この関数は、より正確な乗算結果を返します。
//コール:Accmul(arg1、arg2)
//返品値:Arg1にArg2の正確な結果を掛けます
関数accmul(arg1、arg2)
{{
varm 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)
}
//数値タイプにmulメソッドを追加します。これは、呼び出しがより便利です。
number.prototype.mul = function(arg){
Accmulを返す(arg、this);
}
//メソッドを追加して、正確な追加結果を取得します
//説明:JavaScriptの結果にはエラーが発生し、2つのフローティングポイント数値が追加されると、より明白になります。この関数は、追加のより正確な結果を返します。
//コール:accidd(arg1、arg2)
//返品値:Arg1とarg2の正確な結果
function acadd(arg1、arg2){{
var R1、R2、M;
try {r1 = arg1.toString( "。")[1] .length} catch(e){r1 = 0}
try {r2 = arg2.toString( "。")[1] .length} catch(e){r2 = 0}
m = math.pow(10、math.max(r1、r2)))
return(arg1*m+arg2*m)/m
}
//番号タイプに追加メソッドを追加します。これは、呼び出しがより便利です。
number.prototype.add = function(arg){
return acadd(arg、this);
}