是否有将Infinity
转换为0
的方法?
如果计算返回Infinity
,我想将其表示为0
。我尝试在to_i
中使用(+1.0/0.0).to_i
,但却引发了FloatDomainError
错误。
答案 0 :(得分:3)
> x = (+1.0/0.0)
=> Infinity
> x = 0 if x.infinite?
=> 0
> x
=> 0
答案 1 :(得分:2)
有两个无穷大:积极和消极。方法Float#infinite?为正无穷大返回+1,为负无穷大返回-1,如果数字不为则返回nil。所以:
if f.infinite?
f = 0
end
这是有效的,因为+1和-1都是 truthy 值,而nil是 falsy 值。
如果它只是正无穷大,你希望用零替换,那么:
if f.infinite? == 1
f = 0
end
同样对于负无穷大。
如果数字可能是整数或其他类型的不是浮点数的数字,那么首先将它转换为浮点数:
if f.to_f.infinite?
f = 0
end
答案 2 :(得分:1)
您可以使用字符串插值:
"#{+1.0/0.0}".to_f #=> 0
答案 3 :(得分:0)
result = 1.0/0 #=> Infinity
result.to_f.infinite? ? 0 : result
答案 4 :(得分:0)
您可以尝试使用无限测试?如下所示:
def no_infinites num
num.to_f.infinite? ? 0 : num
end
如果num
为±Infinity
,则返回0,否则返回num
。如果num
是有限的
num
的任何类型
答案 5 :(得分:0)
使用0.0 || 1.0 / 0.0,这不起作用