2013-03-07 104 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