2014-11-24 60 views
3

我只是偶然在Javascript非常奇怪的東西防空火炮。爲什麼13596 * 0.1與13596/10不同?

我的劇本是乘以0.1 13596,輸出功率爲:1359.6000000000001

我們都必須承認,0.1 = 1/10,所以我試了一下:

13596/10 = 1359.6 

我用Firefox測試它和Chrome,也會發生相同的結果。

我想知道,如果它是有關浮動的,所以我嘗試了以下內容:

13596 * parseFloat(0.1) = 1359.6000000000001 

都能跟得上。

順便說一句,這不等於:

(13596*0.1) === (13596/10) => false 

有沒有人有這個結果的想法?

Here's the JSFiddle.

+3

因爲'0.1'不是十分之一(類型'(0.1).toFixed(20)'在控制檯)。 – georg 2014-11-24 15:07:33

+1

http://docs.oracle.com/cd/E19957-01/806-3568/ncg_goldberg.html – Ryan 2014-11-24 15:08:11

+0

坎。什麼? :p那麼該怎麼辦?除以10(未由0.1乘?) – 2014-11-24 15:08:25

回答

8

記住,浮動點,一個數字,你在屏幕上看到的並不一定準確計算機建模的數量。

例如,使用node

> 1359.6 
1359.6 
> (1359.6).toFixed(20) 
'1359.59999999999990905053' 

節點顯示你1359.6,但是當你要求更精確,你可以看到真正的數字是不完全是你所看到的 - 它是圓的。 0.1也是如此:

> (0.1).toFixed(20) 
'0.10000000000000000555' 

通常,當您使用浮動工具時,您在顯示它們之前接受這種不精確和圓形數字。

某些數字正好可以表示,但假設浮點不精確是最安全的。例如,0.5可以精確地表示爲:在JavaScript然而

> 13596/10 
1359.6 
> (13596/10).toFixed(20) 
'1359.59999999999990905053' 

整數結果之間劃分在的整數。在其它語言中,:由10

> (0.5).toFixed(20) 
'0.50000000000000000000' 

除以實際產生相同的結果,通過0.1乘以所有數字都被建模爲浮點。

一般來說,當您需要精確地表示你應該使用十進制數字型十進制數字,雖然這本身是不提供的JavaScript。

還沒有點使用的代碼作爲parseFloat(0.1)0.1已經浮子。

+0

這是圍繞這個問題的核心問題,這就是'0.1'不完全可以表示。我認爲你可以把這個工作變成一個很好的答案。 – tmyklebu 2014-11-24 15:32:25

+0

@tmyklebu,我稍微擴展了一些答案,以強調更多示例的重點。 – 2014-11-24 15:43:48

相關問題