【小(xiǎo)編推薦】js的(de)加減乘除結果誤差解決

2017-09-29  &nb←↕‍sp;|   發布者$✔♣:   |&nbs‍¥✔♦p;  查看(kàn):3320次

前端開(kāi)發

//說(shuō)明(míng):javascr÷≈§ipt的(de)加法結果會(huì)有(yǒu)誤差,↓π 在兩個(gè)浮點數(shù)相(xiàng)加的(de)β∑β時(shí)候會(huì)比較明(míng< ×★)顯。這(zhè)個(gè)函數(shù)返回較為(wèi)精确的(de)加♣εε§法結果。   

//調用(yòng):accAdd(arg1,arg2≤≈‌&)   

//返回值:arg1加上(shàng)arg2的(de)精确結果 &nλ₹bsp; 

function accAdd(a× φrg1,arg2){  
&nbs↑™p;   var&φε nbsp;r1,r2,m;  
&∞≤nbsp;   try{r1=arg1 ≤ .toString().split(".")[1].♣§α♠length}catch(e){r1=0}  
&nb&↑♦‌sp;   try{㮀r2=arg2.toString().split("✘ ₽;.")[1].length}catch(e){r2=0>←¥ }  
   &&♦nbsp;m=Math.pow(10,Math.max(r1,r↑≠✔2))  
 &nα £bsp;  return (arλ♣g1*m+arg2*m)/m &nπ₩₩σbsp;
}

//說(shuō)明(míng):javascript的(de)₩>減法結果會(huì)有(yǒu)誤差,在兩個(g®←è)浮點數(shù)相(xiàng)加的(de)時(shí)候會(♣→huì)比較明(míng)顯。這(zhè✘φ  )個(gè)函數(shù)返回較為(wèπ↕i)精确的(de)減法結果。   
//調用(yòng):accSub(arg1,arg2) &nb♣©×sp; 
//返回值:arg1減上(shàng)arg2的(de)↑ 精确結果   

function accSub(arg1,arg2){ & ×nbsp;    
&₽©nbsp;   return&→∏nbsp;accAdd(arg1,-arg2);  ​♥;
}

//說(shuō)明(míng):javascλ☆♠ript的(de)乘法結果會(huì)有(yǒu∑‍&)誤差,在兩個(gè)浮點數(shù)相(xiàng)乘的(de) φ時(shí)候會(huì)比較明(míng)顯。這(ε↔∑zhè)個(gè)函數(shù)返回較為(wèi)精确的(de∏Ω→α)乘法結果。    ✘•;
//調用(yòng):accMul(arg1,✘™‍arg2)   
//返回值:arg1乘以arg2的(de)精确結果&©↕nbsp;  

function accMul(arg1,aδ<rg2)  
{ &‌§&nbsp;
    v₹δ∏≈ar m=0,s1=arg1.toSε←tring(),s2=arg2.toString()© ÷≈;  
  <>×→;  try{m+=s1.split(★ ↔Ω".")[1].length}catch(e)​♠δ•{}  
 &n•§∞bsp;  try{m+=s2.split(&qu©‍ot;.")[1].length}catch(e ​♦){}  
 &n♥↓​bsp;  return♦ ÷ Number(s1.replace("."φ$∞;,""))*Number(s2.replace(&qu₹☆★ot;.",""))/Math.pow(10,m€•¶ )  
}

//說(shuō)明(míng):javascript&∞的(de)除法結果會(huì)有(yǒu)誤差,在兩個(gè)浮點↔∑¶✔數(shù)相(xiàng)除的(de)時(shí)候會(huì↑↑ ‍)比較明(míng)顯。這(zhè)個(gè)函數(shù)返回較為 ♠(wèi)精确的(de)除法結果。   
//調用(yòng):accDiv(arg1,arg2)&n™♦‌bsp;  
//返回值:arg1除以arg2的(de π)精确結果   

function accDiv ↔(arg1,arg2){  ¶₹•δ
    vγαar t1=0,t2=0,r1,r2;&λ↕nbsp; 
   &♣$☆πnbsp;try{t1=arg1.toString().split("∞₹→↓;.")[1].length}catch'™↓¥(e){}  
 &nb'π§sp;  try{t2=arg2.toString(§¶$₹).split(".")[1]" .length}catch(e){}  
★≥↕    witα€¥h(Math){  
  &≤≈±♥nbsp;    &nb♠φsp;r1=Number(arg1.toStrinπγ™g().replace(".","↓↓≠​;"))  
&nbs±→£p;   &nb♣♦>sp;   r2=Number(arg2.×£' toString().replace("."¥ε ',"")) &nb&λ¶₽sp;
   γ>Ω;   &n '✔bsp; return <'♣π;(r1/r2)*pow(10,t2-t1); ¥₹"€; 
  &$β&‌nbsp; }  
←∏♦}