2017-07-06 51 views
0

我在使用Node REPL並遇到了這種奇怪的行爲。節點給出特定浮點數的總和奇怪的輸出

4.32 + 4.78應該只是9.1

> 4.32 + 4.78 9.100000000000001

另一條是:

> 7.3 + 1.08 8.379999999999999

對於其他數字,它工作正常:

> 4.31 + 4.78 9.09

分別在Ubuntu 16.04和Linux/amd64上的Node 4.8.3和7.4上測試它。

獲取相同的輸出。

任何人都可以解釋爲什麼它是這樣的嗎?

+1

它不是一個節點的js問題是JavaScript的問題,檢查在瀏覽器控制檯所有的價值,你會得到相同的結果exp檢查2.4 + 2.3 = 4.699999999 –

回答

3

JavaScript使用IEEE 754 double precision floating-point numbers(參見ECMA-262),它們不能準確地表示所有小數部分。

要獲得您期望的結果,您可以對數字進行縮放以使用整數(例如,計數美分而不是美元),或者在計算完成後將數字四捨五入到特定的小數位數。

例子:

> 4.32 + 4.78 
9.100000000000001 

> (432 + 478)/100 
9.1 

> +(4.32 + 4.78).toFixed(2) 
9.1 

> Math.round(100 * (4.32 + 4.78))/100 
9.1 

有關詳細信息,請參閱本: