先根據小數點的位數,把小數擴大適當的倍數,
/**
* 計算需要乘以的倍數
*/
var getMaxBaseNum = function(num1, num2) {
var baseNum, baseNum1, baseNum2;
try {
baseNum1 = num1.toString().split(".")[1].length;
} catch (e) {
baseNum1 = 0;
}
try {
baseNum2 = num2.toString().split(".")[1].length;
} catch (e) {
baseNum2 = 0;
}
return baseNum = Math.pow(10, Math.max(baseNum1, baseNum2));
}
加法
/**
* 解決js小數加法計算的bug
*/
var addition = function (num1, num2) {
if(exports.isNumEmpty(num1)){
num1 = "0";
}
if(exports.isNumEmpty(num2)){
num2 = "0";
}
var baseNum = getMaxBaseNum(num1, num2);
return (num1 * baseNum + num2 * baseNum) / baseNum;
};
減法
/**
* 解決js小數減法計算的bug
*/
var subtraction = function (num1, num2) {
if(exports.isNumEmpty(num1)){
num1 = "0";
}
if(exports.isNumEmpty(num2)){
num2 = "0";
}
var baseNum = getMaxBaseNum(num1, num2);
return (num1 * baseNum - num2 * baseNum) / baseNum;
};
乘法
/**
*乘法 精確計算
*/
var multiply = function (params1,params2){
if(!params1){
params1 = 0;
}
if(!params2){
params2 = 0;
}
var m=0;
var s1=params1.toString();
var s2=params2.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) ;
};
java版實現方法地址:https://blog.csdn.net/dhj199181/article/details/95942014