2014-02-13 34 views
0

有沒有辦法將Infinity轉換爲0用紅寶石將無窮大轉換爲0

如果計算結果返回Infinity,我想將其表示爲0。我試圖使用to_i,如(+1.0/0.0).to_i,但是拋出了FloatDomainError錯誤。

+2

爲什麼地球上你想要表示Infinity爲0? – Phrogz

+0

捕獲異常'FloatDomainError'並返回0,如果是的話。 –

回答

3
> x = (+1.0/0.0) 
=> Infinity 
> x = 0 if x.infinite? 
=> 0 
> x 
=> 0 
+0

或'x = Float :: INFINITY#=> Infinity','x.is_a? Fixnum#=> true' –

2

有兩個infinities:正面和負面。方法Float#infinite?返回+1表示正無窮,-1表示負無窮,如果數字不是,則返回零。所以:

if f.infinite? 
    f = 0 
end 

這工作,因爲+1和-1都truthy值和零是falsy值。

如果只是希望用零來代替,然後正無窮大:

if f.infinite? == 1 
    f = 0 
end 

,同樣爲負無窮大。

如果數可能是整數或一些其他類型的數字的不是浮點數,則先將其轉換爲float:

if f.to_f.infinite? 
    f = 0 
end 
+1

注意:沒有'​​Fixnum#infinite?',所以你可能想'f.to_f.infinite?' – Phrogz

+0

@Progrog - 好點,謝謝。 –

0
result = 1.0/0 #=> Infinity 
result.to_f.infinite? ? 0 : result 
0

你可以嘗試使用無限的測試?像下面這樣:

def no_infinites num 
    num.to_f.infinite? ? 0 : num 
end 

這將返回0,如果num±Infinitynum否則。返回值將是什麼類型num是,如果num是有限

1

您可以使用此字符串插值:

"#{+1.0/0.0}".to_f #=> 0 
+0

這真的很好!有什麼缺點? – Vlad