例子:
0.1+0.2 //0.30000000000000004
1.2-1 //0.19999999999999996
1.15*100 //114.99999999999999
1.2/0.2 //5.999999999999999
方式1
// 两个浮点数求和
function num_add(num1,num2){
var r1,r2,m;
try{
r1 = num1.toString().split('.')[1].length;
}catch(e){
r1 = 0;
}
try{
r2=num2.toString().split(".")[1].length;
}catch(e){
r2=0;
}
m=Math.pow(10,Math.max(r1,r2));
return Math.round(num1*m+num2*m)/m;
}
// 两个浮点数相减
function num_subtract(num1,num2){
var r1,r2,m,n;
try{
r1 = num1.toString().split('.')[1].length;
}catch(e){
r1 = 0;
}
try{
r2=num2.toString().split(".")[1].length;
}catch(e){
r2=0;
}
m=Math.pow(10,Math.max(r1,r2));
n=(r1>=r2)?r1:r2;
return Number((Math.round(num1*m-num2*m)/m).toFixed(n));
}
// 两个浮点数相乘
function num_multiply(num1,num2){
var m=0,s1=num1.toString(),s2=num2.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);
}
// 两个浮点数相除
function num_divide(num1,num2){
var t1,t2,r1,r2;
try{
t1 = num1.toString().split('.')[1].length;
}catch(e){
t1 = 0;
}
try{
t2=num2.toString().split(".")[1].length;
}catch(e){
t2=0;
}
r1=Number(num1.toString().replace(".",""));
r2=Number(num2.toString().replace(".",""));
return (r1/r2)*Math.pow(10,t2-t1);
}
结果:
num_add(0.1, 0.2);
num_subtract(1.2,1);
num_multiply(1.15, 100);
num_divide(1.2,0.2);
方式2
引入 bignumber.js
npm install bignumber.js
// 加
function num_add(num1, num2) {
return Number(math.add(math.bignumber(num1), math.bignumber(num2)));
}
// 减
function num_subtract(num1, num2) {
return Number(math.subtract(math.bignumber(num1), math.bignumber(num2)));
}
// 乘
function num_multiply(num1, num2) {
return Number(math.multiply(math.bignumber(num1), math.bignumber(num2)));
}
// 除
function num_divide(num1, num2) {
return Number(math.divide(math.bignumber(num1), math.bignumber(num2)));
}
结果:
num_add(0.1, 0.2);
num_subtract(1.2,1);
num_multiply(1.15, 100);
num_divide(1.2,0.2);