js運算精度問題

2021-10-19 21:10:59 字數 1007 閱讀 8191

原理是,將浮點數乘以(擴大)10的n次方倍,把浮點數變為整數後再進行相應的運算,最後將得到的結果除以(縮小)10的n次方倍。 

原理示例: 

將   console.log(1-0.8);  變為 console.log((1 * 10 - 0.8 * 10) / 10); 即可得到正確的值 

根據上述原理,可以封裝一些方法出來解決此類問題。如下所示(math.pow(x, y);表示求x的y次方): 

//加

function floatadd(arg1,arg2)catch(e)

trycatch(e)

m=math.pow(10,math.max(r1,r2));

return (arg1*m+arg2*m)/m;

}//減

function floatsub(arg1,arg2)catch(e)

trycatch(e)

m=math.pow(10,math.max(r1,r2));

//動態控制精度長度

n=(r1>=r2)?r1:r2;

return ((arg1*m-arg2*m)/m).tofixed(n);

}//乘

function floatmul(arg1,arg2) catch(e){}

trycatch(e){}

return number(s1.replace(".",""))*number(s2.replace(".",""))/math.pow(10,m);

}//除

function floatdiv(arg1,arg2)catch(e){}

trycatch(e){}

r1=number(arg1.tostring().replace(".",""));

r2=number(arg2.tostring().replace(".",""));

return (r1/r2)*math.pow(10,t2-t1);

}

原文路徑:

js運算精度問題

原理是,將浮點數乘以 擴大 10的n次方倍,把浮點數變為整數後再進行相應的運算,最後將得到的結果除以 縮小 10的n次方倍。原理示例 將 console.log 1 0.8 變為 console.log 1 10 0.8 10 10 即可得到正確的值 根據上述原理,可以封裝一些方法出來解決此類問題。...

js做小數運算精度問題

當js做小數運算時存在bug,大概是因為二進位制和十進位制轉換之間的關係。bug如圖 解決方案 1.加減法可以用引數乘以1000再用結果除以1000。乘除法可以用引數分別 100進行計算後在除以10000 2.使用tofixed 方法,效率貌似沒有第一種高,這裡返回的值一定有兩位小數,要麼後台用do...

JS加減乘除運算精度缺失問題

計算機在計算時會把數字轉化為二進位制來計算,此時只能模仿十進位制進行四捨五入,但是二進位制只有 0 和 1 兩個,於是變為 0 舍 1 入。這是浮點數運算時出現誤差,丟失精度的原因。為了解決這些問題,我們可以把浮點數乘以乙個數,時期變為整數再進行運算,之後再除以這個數,恢復原來的大小來解決浮點數計算...