2014-02-11 31 views
0

我運行的JavaScript代碼如下:在JavaScript操作很多小數

var var1 = 0.53; 
var var2 = 0.47; 
alert(var1-var2); 

此代碼返回:

0.06000000000000005 

但如果我執行這段JavaScript代碼:

var var1 = 0.14; 
var var2 = 100; 
alert(var1*var2); 

退貨是:

14.0600000000000002 

什麼文件來解釋這個?

謝謝!

+3

任何討論浮點數如何工作的內容。 –

+0

http://docs.oracle.com/cd/E19957-01/806-3568/ncg_goldberg.html –

回答

2

這是一個非常基本的問題,它涉及浮點數的表示方式(請參閱wikipedia article以獲取詳細說明)。它不是特定於JavaScript。

由於計算機僅適用於二進制值,因此不可能精確地表示某些分數。例如:1/2或3/4可以精確表示。另一方面1/3不能(如十進制)。與0.14這樣看似「簡單」的數字會導致舍入誤差是矛盾的,然而,當你認爲它爲7/50 = 7 /(5 * 5 * 2)時,它就變得清晰了。問題是五個。 1/5 = 0.2在十進制系統中不錯,但不是二進制數。

更新:

我的意思並不是說這是不可能做這種類型的計算準確。但是,您必須爲此使用某些庫(例如,使用貨幣值)

+0

很好的解釋,我只是提供了一個鏈接。 [每位計算機科學家應該瞭解的浮點算術](http://docs.oracle.com/cd/E19957-01/806-3568/ncg_goldberg.html) –