js計算小數精度問題

2022-02-19 05:03:13 字數 1466 閱讀 3958

js進行部分小數運算時,會出現精度問題。

解決思路是,把小數同時擴大為10的x冪,返回計算完畢後,再縮小為10的x冪。

在math方法上新增加減乘除方法。

let extentfns = ['add', 'sub', 'mul', 'div'];

//運算函式

function

ufunc(type, arg)

catch

(e)

decimaldigits.push(digit);

} //找到最大的位數

decimaldigits.sort( (a, b)=> a -b );

let maxdigit = decimaldigits[decimaldigits.length - 1];

let m = math.pow(10, maxdigit);//

小數轉換成整數需要擴大的倍數

let result = 0;

switch

(type)

return result /m;

break

;

case 'sub':

for(let index in

arg)

else

}return result /m;

break

;

case 'mul':

result = 1;

for(let index in

arg)

else

}return result /m;

break

;

case 'div':

result = 1;

for(let index in

arg)

else

}return result /m;

break

;

default

:

break

;

}}math.ufunc =ufunc;

//掛載到math上

= add1;

for(let i = 0; i < extentfns.length; i++);}//

引數可以連續傳遞 math.add(0.1, 0.2, 0.3, ....);

console.log( math.add(0.1,0.2));

console.log( math.sub(0.12,0.2));

console.log( math.mul(0.2,0.4));

console.log( math.div(0.2,0.04));

想使用時引入這個js檔案即可在math方法上找到這幾個函式了。

參考:

js做小數運算精度問題

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

js 頁面小數相加精度問題

解決方法 把需要計算的數字公升級 乘以10的n次冪 成計算機能夠精確識別的整數,等計算完畢再降級 除以10的n次冪 這是大部分程式語言處理精度差異的通用方法。比如計算0.33和5.2的和,則需要把 0.33 100 5.2 100 100。函式 var numadd function num1,nu...

討論c c 計算小數的精度問題

求出所有100以下整數與一位小數相乘等於相加的浮點數 這個有bug浮點數計算時精度會出現誤差 除非使用非常精確的型別或限制浮點的位數 比如 include int main a b 會產生這個問題 cout.precision這個讓我非常討厭,乙個偽限制精度 師傅 這個不是bug,而是精度問題,沒有...