原理是,將浮點數乘以(擴大)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 入。這是浮點數運算時出現誤差,丟失精度的原因。為了解決這些問題,我們可以把浮點數乘以乙個數,時期變為整數再進行運算,之後再除以這個數,恢復原來的大小來解決浮點數計算...