- 加法
思路:
計(jì)算出小數(shù)點(diǎn)后更多的位數(shù)N, 做10的N次方,
兩個(gè)加數(shù)各自乘以10的N次方再相加,
然后除以10的N次方
比如 3.14 + 3.1, 則過(guò)程為:
- 更多的位數(shù)2, 做10的2次方等于100,
- 3.14*100 + 3.1*100 = 624
- 624 / 100 = 6.24
function accAdd(arg1,arg2){
var r1, r2, m;
try{r1=arg1.toString().split(".")[1].length}catch(e){r1=0}
try{r2=arg2.toString().split(".")[1].length}catch(e){r2=0}
m=Math.pow(10,Math.max(r1,r2))
return (arg1*m + arg2*m) / m
}
- 減法
思路:
計(jì)算出小數(shù)點(diǎn)后更多的位數(shù)N, 做10的N次方,
兩個(gè)加數(shù)各自乘以10的N次方再相減,
然后除以10的N次方
最后轉(zhuǎn)換成轉(zhuǎn)換成更多的位數(shù)toFixed(N)
比如 3.14 - 3.1, 則過(guò)程為:
- 更多的位數(shù)2, 做10的2次方等于100,
- 3.14*100 - 3.1*100 = 4
- 4 / 100 = 0.04
function Subtr(arg1,arg2){
var r1, r2, m, n;
try{r1=arg1.toString().split(".")[1].length}catch(e){r1=0}
try{r2=arg2.toString().split(".")[1].length}catch(e){r2=0}
m=Math.pow(10, Math.max(r1,r2));
n=(r1 >= r2)?r1:r2;
return ((arg1*m-arg2*m)/m).toFixed(n);
}
- 乘法
思路:
兩個(gè)乘數(shù)小數(shù)點(diǎn)之后位數(shù)相加得到N, 做10的N次方
兩個(gè)乘數(shù)直接去掉小數(shù)點(diǎn), 然后相乘
最后除以10的N次方
比如 3.14 * 3.1, 則過(guò)程為:
- 小數(shù)點(diǎn)之后位數(shù)相加得3, 做10的3次方1000,
- 314 * 31 = 9734
- 9734 / 1000 = 9.734
function accMul(arg1,arg2)
{
var m=0,s1=arg1.toString(),s2=arg2.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)
}
- 除法
思路:
兩個(gè)除數(shù)直接去掉小數(shù)點(diǎn)相除, 得M
除數(shù)的小數(shù)點(diǎn)位數(shù)減去被除數(shù)的小數(shù)點(diǎn)位數(shù), 做10的N次方
然后, 用 M 乘以 10的N次方(復(fù)用上面乘法的實(shí)現(xiàn))
比如 3.14 / 3.1, 則過(guò)程為:
- 直接去掉小數(shù)點(diǎn)相除 314 / 31 = 10.129,
- 除數(shù)的小數(shù)點(diǎn)位數(shù)1, 減去被除數(shù)的小數(shù)點(diǎn)位數(shù)2, 得 -1, 做10的-1次方得0.1
- 然后復(fù)用乘法的邏輯, 計(jì)算 10.129 * 0.1
- 小數(shù)點(diǎn)之后位數(shù)相加得4, 做10的4次方10000,
- 10129 * 1 = 10129
- 10129/ 10000 = 1.0129
function accDiv(arg1,arg2){
var t1=0,t2=0,r1,r2;
try{t1=arg1.toString().split(".")[1].length}catch(e){}
try{t2=arg2.toString().split(".")[1].length}catch(e){}
with(Math){
r1=Number(arg1.toString().replace(".",""))
r2=Number(arg2.toString().replace(".",""))
return accMul((r1/r2),pow(10,t2-t1));
}
}