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);