在js中,帶小數(shù)的數(shù)據(jù)運(yùn)算時(shí)可能會(huì)出現(xiàn)好多位小數(shù)崩哩。
這是因?yàn)樵趈s中浮點(diǎn)數(shù)的計(jì)算是以2進(jìn)制計(jì)算的言沐。
解決辦法就是先轉(zhuǎn)成整數(shù)再運(yùn)算。
直接上代碼:
//加
add: function(num1,num2){
var baseNum, baseNum1, baseNum2;
/*try{
//在此運(yùn)行代碼
}
catch(err){
//在此處理錯(cuò)誤
}*/
try {
baseNum1 = num1.toString().split(".")[1].length;
} catch (e) {
baseNum1 = 0;
}
try {
baseNum2 = num2.toString().split(".")[1].length;
} catch (e) {
baseNum2 = 0;
}
/*Math.pow(a,b) => a的b次方*/
baseNum = Math.pow(10, Math.max(baseNum1, baseNum2));
return (num1 * baseNum + num2 * baseNum) / baseNum;
}
//減
sub : function(num1,num2){
// num1 - num2
var baseNum, baseNum1, baseNum2;
var precision;// 精度
try {
baseNum1 = num1.toString().split(".")[1].length;
} catch (e) {
baseNum1 = 0;
}
try {
baseNum2 = num2.toString().split(".")[1].length;
} catch (e) {
baseNum2 = 0;
}
// precision = (baseNum1 >= baseNum2) ? baseNum1 : baseNum2;
precision = Math.max(baseNum1, baseNum2);
baseNum = Math.pow(10, precision);
return ((num1 * baseNum - num2 * baseNum) / baseNum).toFixed(precision);
}
//乘
multi : function(num1, num2) {
var baseNum = 0;
try {
baseNum += 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);
}
//除
divide : function(num1,num2){
var baseNum1 , baseNum2 ,baseNum3, baseNum4;
try {
baseNum1 = num1.toString().split(".")[1].length;
} catch (e) {
baseNum1 = 0;
}
try {
baseNum2 = num2.toString().split(".")[1].length;
} catch (e) {
baseNum2 = 0;
}
baseNum3 = Number(num1.toString().replace(".", ""));
baseNum4 = Number(num2.toString().replace(".", ""));
return (baseNum3 / baseNum4) * Math.pow(10, baseNum2 - baseNum1);
}