有沒有辦法將Infinity
轉換爲0
?用紅寶石將無窮大轉換爲0
如果計算結果返回Infinity
,我想將其表示爲0
。我試圖使用to_i
,如(+1.0/0.0).to_i
,但是拋出了FloatDomainError
錯誤。
有沒有辦法將Infinity
轉換爲0
?用紅寶石將無窮大轉換爲0
如果計算結果返回Infinity
,我想將其表示爲0
。我試圖使用to_i
,如(+1.0/0.0).to_i
,但是拋出了FloatDomainError
錯誤。
> x = (+1.0/0.0)
=> Infinity
> x = 0 if x.infinite?
=> 0
> x
=> 0
或'x = Float :: INFINITY#=> Infinity','x.is_a? Fixnum#=> true' –
有兩個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
注意:沒有'Fixnum#infinite?',所以你可能想'f.to_f.infinite?' – Phrogz
@Progrog - 好點,謝謝。 –
result = 1.0/0 #=> Infinity
result.to_f.infinite? ? 0 : result
你可以嘗試使用無限的測試?像下面這樣:
def no_infinites num
num.to_f.infinite? ? 0 : num
end
這將返回0,如果num
是±Infinity
和num
否則。返回值將是什麼類型num
是,如果num
是有限
使用0.0 || 1.0/0.0,這將不起作用
爲什麼地球上你想要表示Infinity爲0? – Phrogz
捕獲異常'FloatDomainError'並返回0,如果是的話。 –