1. JSを使用して計算します
12.32 * 7結果は何ですか?
回答:86.240000000000001
なぜこの問題が発生するのですか?それを解決する方法は?
JSが数十進の乗算と分割を扱うとき、バグがあります。解決策は次のとおりです。1進を整数に変換して処理します。
上記の計算は次のように変更できます。
12.32 * 100 * 7/100
結果は次のとおりです。86.24、正しい。
もう一度計算しましょう:
8.80 * 100 * 12/100
結果:105.600000000000002
同様の問題は38.80で発生します。
精度を10回増やす:
8.80 * 1000 * 12/1000
結果:105.6
それは正常です。
16.40 * 1000000 * 6/1000000
結果には問題があります
JS実行をより正確にするために、その後のJS 10進数計算で値を10,000回直接拡張し、その後10,000で割って問題を解決できます。
var num = 38.80;
var num2 = 13;
アラート(num * 10000 * 12/10000);
数値を掛けて10,000で割ったのは、テストに最も適しています。いくつかの数字には小さく、いくつかの数字には、より大きい場合に問題があります(1000,000)。
二、
<script> number.prototype.rate = function(){varostr = this.tostring(); if(ostr.indexof( "。")== -1)return1; elsereturnmath.pow(10、parseint(ostr.length-ostr.indexof( "。") - 1);} functiontran(){args = tran.arguments; vartemp = 1; for(i = 0; i <args.length; i ++)temp*= args [i]*args [i] .rate(); </script>このソリューションはより面倒なソリューションですが、この問題を解決する実際のプロセスを大まかに理解することができます。
//除算関数は正確な分割結果を取得するために使用されます//注:javaScriptの分割結果にエラーがあります。この関数は、より正確な分割結果を返します。 // call:accdiv(arg1、arg2)// return値:arg1の正確な結果をarg2関数accdiv(arg1、arg2){varで割ったt1 = 0、t2 = 0、r1、r2; try {t1 = arg1.toString()。split( " th} catch(e){} with(math){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の乗算結果にエラーがあります。この関数は、より正確な乗算結果を返します。 //呼び出し:accmul(arg1、arg2)// return値:arg1の正確な結果にarg2関数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} {} return number(s1.replace( "。"、 "))*number(s2.replace("。 "、"))/math.pow(10、m)} // mulメソッドを数値タイプに追加します。 number.prototype.mul = function(arg){return accmul(arg、this);} //追加関数は正確な追加結果を取得するために使用されます//注:JavaScriptの追加結果にエラーがあります。この関数は、より正確な追加結果を返します。 //コール:accadd(arg1、arg2)// return値:arg1とarg2関数accadd(arg1、arg2)の正確な結果{var r1、r2、m; try {r1 = arg1.toString()。split( " (arg1*m+arg2*m)/m} //番号タイプに追加メソッドを追加し、呼び出しがより便利になります。 number.prototype.add = function(arg){return accadd(arg、this);}上記のJavaScript小数の乗算結果エラー処理は、私があなたと共有したすべてのコンテンツです。参照を提供できることを願っています。wulin.comをもっとサポートできることを願っています。