ホームページ  >  記事  >  ウェブフロントエンド  >  JS の加算、減算、乗算、除算の JavaScript スキルにおける精度の損失の問題の解決策

JS の加算、減算、乗算、除算の JavaScript スキルにおける精度の損失の問題の解決策

WBOY
WBOYオリジナル
2016-05-16 16:48:101396ブラウズ

JavaScript で加算、減算、乗算、除算に小数を使用すると、結果の後に長い小数が続くことがあり、演算が複雑になり、計算結果に影響を与えます。理由をネットで調べてみると、次のようなことが分かりました。 JavaScript では、小数を含むデータを計算する場合、常に小数点以下の桁数が多くなります。これは、JavaScript の浮動小数点数の計算が 2 進数の計算に基づいているためです。

コードをコピー コードは次のとおりです:

/**
* データに小数点を追加した後の多桁化と計算精度の低下を避けるための加算演算です。
*
* @param num1 加算 1 | num2 加算 2
*/
関数 numAdd(num1, num2) {
varbaseNum,baseNum1,baseNum2;
try {
baseNum1 = num1.toString().split(".")[1].length; >} catch (e) {
baseNum1 = 0;
}
try {
baseNum2 = num2.toString().split(".")[1].length; catch (e ) {
baseNum2 = 0;
}
baseNum = Math.pow(10, Math.max(baseNum1, BaseNum2)); BaseNum;
};
/**
* データの小数点を加算した後の多桁化と計算精度の低下を避けるための加算演算です。
*
* @param num1 減数 | num2 減数
*/
関数 numSub(num1, num2) {
var 精度;// 精度try {
baseNum1 = num1.toString().split(".")[1].length;
} catch (e) {
baseNum1 =
}
try {
baseNum2 = num2.toString().split(".")[1].length;
} catch (e) {
baseNum2 = 0;
}
baseNum = Math .pow( 10, Math.max(baseNum1,baseNum2));
precision = (baseNum1 >=baseNum2) ?baseNum2
return ((num1 *baseNum - num2 *baseNum); toFixed(精度);
/**
* 小数点を含むデータを乗算した後の複数の桁と計算精度の損失を避けるための乗算演算。
*
* @param num1 被乗数
*/
関数 numMulti(num1, num2) {
varbaseNum = 0; num1.toString ().split(".")[1].length;
} catch (e) {
}
try {
baseNum = num2.toString().split(" .") [1].length;
} catch (e) {
}
return Number(num1.toString().replace(".", "")) * Number(num2.toString ().replace(".", "")) / Math.pow(10, BaseNum);
/**
* データを小数点で除算した後の多桁化と計算精度の低下を避けるための除算演算です。
*
* @param num1 除数 | num2
*/
関数 numDiv(num1, num2) {
varbaseNum1 = 0、baseNum2 = 0;
var baseNum3、baseNum4;
try {
baseNum1 = num1.toString(".")[1].length; >} catch (e) {
baseNum1 = 0;
}
try {
baseNum2 = num2.toString().split(".")[1].length; catch (e ) {
baseNum2 = 0;
}
with (Math) {
baseNum3 = Number(num1.toString().replace(".", "")); >baseNum4 = Number(num2.toString().replace(".", ""));
return (baseNum3 / BaseNum4) * pow(10, BaseNum2 - BaseNum1);

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。