我想在我的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对象,这是奇怪的吗?
最快的方法是使用这个:
under_the_test.to_f.nan? # gives you true/false e.g.:
123.to_f.nan? # => false
(123/0.0).to_f.nan? #=> true
另请注意,只有Floats在其上定义了#nan?
方法,这就是为什么我使用#to_f
将结果转换为float的原因。
提示:如果您有可能除以零的整数计算,则无效:
(123/0).to_f.nan?
因为123和0都是整数并且会抛出ZeroDivisionError
,为了克服这个问题,Float::NAN
常量可能很有用 - 例如像这样:
return Float::NAN if divisor == 0
return x / divisor