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...