我正在检查Ruby on Rails应用程序中的变量是否等于NaN。
我看到了这个answer,但它不是很有用,因为在我的代码中,如果变量是NaN,我想返回0,否则返回值:
return (average.nan ? 0 : average.round(1))
问题是,如果数字不是NaN,我得到这个错误:
NoMethodError: undefined method `nan?' for 10:Fixnum
我不能检查这个数是否是一个Float示例,因为它在两种情况下都是(可能,我在计算一个平均值)。我能做什么?只有我才奇怪,一个检查变量是否等于NaN的函数只对NaN对象可用?
3条答案
按热度按时间ar5n3qh51#
最快的方法是使用这个:
还要注意的是,只有Floats才定义了
#nan?
方法,这就是为什么我使用#to_f
来首先将result转换为float的原因。提示:如果你的整数计算可能会被零除,这将不起作用:
因为123和0都是整数,这将抛出
ZeroDivisionError
,为了克服这个问题,Float::NAN
常量可能很有用-例如:uyto3xhc2#
我在寻找既不是
NaN
也不是Infinity
的东西(例如,一个有限的数)时找到了这个答案,因此我将把我的发现添加到这里,以供下一个谷歌人使用。在ruby中,答案总是在搜索
Float
文档时输入我的期望值,然后找到finite?
7z5jn7bk3#
避免这类问题的最佳方法是依赖于这样一个事实,即NaN甚至不等于它自己:
这可能不会是任何其他类型的问题。