2013-03-07 139 views
1

我期待下面的代碼拋出一個錯誤,但它會返回NaN。這種行爲描述在哪裏?爲什麼它不同於整數除零?浮點除以零

0.0/0.0 # => NaN 

編輯:我需要在這種情況下返回零,所以我打算

(x/y rescue 0) 

但這並沒有工作。怎麼做?

+0

重複的問題。 http://stackoverflow.com/questions/7726615/why-in-ruby-0-0-0-3-0-0-and-3-0-behave-differently – christopher 2013-03-07 16:50:07

+0

'0/0'是一個不確定的形式,所以它是從紅寶石準確返回'NaN' http://en.wikipedia.org/wiki/Division_by_zero – nicooga 2013-03-07 17:44:29

回答

0
res = x/y 
res = 0 unless res.finite? 

finite?返回true,如果一個浮球是一個有效的浮點數(不是無限的,喃?是假的)。

0

你可以做類似

x == 0 and y == 0 ? 0 : x/y 

x.nonzero? || y.nonzero? ? x/y : 0 
+0

是的,當然,謝謝。我正在尋找一種方法來確保我的(任意)表達式不會評估爲「NaN」。有沒有在Ruby中檢查'NaN'? – akonsu 2013-03-07 16:53:43

+0

@akonsu有一個'.nan?'方法,但它不適用於整數,只適用於浮點數 – alestanis 2013-03-07 16:56:58

+0

爲什麼downvote? – alestanis 2013-03-07 18:51:24