js中解決兩個浮點數相加減的精度問題

2021-10-13 14:27:23 字數 1226 閱讀 6675

在開發中,很多時候都要處理浮點數的相加減運算,所以特地在此記錄一下。

問題原因:產生該問題的原因是因為在計算機中,是利用二進位制來表示小數,有些小數是用二進位制表現不出來的,所以產生了精度問題。

例子:0.1+0.2  按照我們常規思路,他是等於0.3的,但是在計算機中 0.1+0.2 = 0.30000000000000004

解決思路:將浮點數轉化為整數,相加減了之後在將結果轉化為浮點數。

**:

兩個浮點數相減返回精確結果:

// 兩個浮點數相減返回精確結果

function subfloattoint(minuend,subtraction)

catch (e)

try

catch (e)

decimallength = minuendlength >= subtractionlength ? minuendlength : subtractionlength;

totalvalue = ((minuend*math.pow(10,decimallength) - subtraction*math.pow(10,decimallength))/ math.pow(10,decimallength)).tofixed(decimallength);

return totalvalue;

}

兩個浮點數相加返回精確結果:

// 兩個浮點數相加返回精確結果

function accadd(addendone, addendtwo)

catch (e)

try

catch (e)

// 判斷絕對值的結果,

absvalue = math.abs(addendonelength - addendtwolength);

maxvalue = math.pow(10, math.max(addendonelength, addendtwolength));

if (absvalue > 0) else

} else

return (addendone + addendtwo) / maxvalue;

}

按照上述思路,我們在後台編寫**的時候也能夠對浮點數進行處理,但是推薦用 bigdecimal

如何判斷兩個浮點數是否相等

眾所周知,在c c 語言中,兩個整形型別的數字是可以直接用 進行比較的,而兩個浮點型別的資料是不能直接用 符號進行比較的。不能直接進行比較的原因是 1.0000001 和 1.0 這兩個數在絕大多數的情況下,認為它們是相等的,所以經常能看到如下的 c 或者 c if fabs a b eps 0 一...

Java中比較兩個浮點數是否相等

public class test public static void isequaloffloat float a,float b 執行結果 使用 符號比較是否相等 true 使用 math.abs 方法比較是否相等 false 使用 math.abs 方法比較是否相等 比較寬容的限制 true...

Python兩個整數相除得到浮點數值的方法

在python中進行兩個整數相除的時候,在預設情況下都是只能夠得到整數的值,而在程式設計客棧需要進行對除所得的結果進行精確地求值時,想在運算後即得到浮點值,那麼如何進行處理呢?1 修改被除數的值為帶小數點的形式即可得到浮點值,這種方法程式設計客棧在被除數事先知道的情況下才可以採用有效,而這種情況意味...