使用Ruby将Infinity转换为0

时间:2014-02-13 19:20:00

标签: ruby floating-point infinite

是否有将Infinity转换为0的方法?

如果计算返回Infinity,我想将其表示为0。我尝试在to_i中使用(+1.0/0.0).to_i,但却引发了FloatDomainError错误。

6 个答案:

答案 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,这不起作用