js 浮點數計算精確度不準確的解決方案

2022-04-28 18:57:10 字數 651 閱讀 8956

12*1.2 != 14.4 得到14.3999999

0.1+0.2 != 0.3 得到0.30000000000000004

為什麼會這樣呢?

原來js在計算浮點數時會先把浮點數轉換成二進位制,其中會出現誤差,相加完再轉換乘十進位制時又會出現誤差,吧啦吧啦吧啦,大概是這個原因吧,不重要,重要的是解決方案,下面是加減乘除的解決方法,核心原理是將浮點數轉換成整數,再轉換成浮點數。

下面給出具體方法

const computefloat =

},compute (num1, num2, type) = this

.getdigits(num1, num2)

switch

(type)

},add (num1, num2, d1, d2) ,

subtract (num1, num2, d1, d2) ,

multiply (num1, num2, d1, d2) ,

divide (num1, num2, d1, d2)

}

使用的時候是這樣的:

加:

computefloat.compute(0.1,0.2,'add')

當然,如果對結果精確度要求不嚴格,可以用tofixed,保留指定小數字

關於浮點數計算不准的問題

1 include 2 intmain 3view code 上面的 乙個j 2,乙個,i 3,這說明了使用浮點數不注意很容易出錯,浮點數存在精度問題,因為浮點數不能準確的儲存只能用最接近的,所以要麼給其加乙個精度 define eps 0.000001 要麼用double.如float 4位元組 ...

js浮點數的計算

js在計算浮點數時可能不夠準確,會產生捨入誤差的問題,這是使用基於ieee745數值的浮點計算的通病,並非ecmascript一家,其他使用相同數值格式的語言也存在這個問題。這裡講一下js浮點數加 減 乘 除的正確做法。整數的乘法運算是準確的,這裡我們將浮點數的乘法運算轉化為整數乘法,然後除以10的...

PHP浮點數的精確計算BCMath

php bcmath bc是binary calculator的縮寫。bc 函式的引數都是運算元加上乙個可選的 int scale 比如string bcadd string lef tope rand str ingleftoperand,string right operand int scal...