除了.round(1)之外,还有更好的方法可以将整数强制转换为Ruby中的浮点数吗?

时间:2013-05-31 14:52:13

标签: ruby floating-point integer coercion

标题中的问题是什么。我有一对整数,我想将它转换为浮点数,这样我就可以对它进行浮点数学运算(得到一个很好的百分比)。

现在我的代码看起来像这样。

(failure_and_run_count[:failure].round(1) / failure_and_run_count[:run].round(1)) * 100.0

有人请告诉我有一种更好的方法可以将failure_and_run_count中的ints强制转换为浮点数。

3 个答案:

答案 0 :(得分:3)

两种可能的选择:

Float 方法接受其参数并将其转换为浮点数,如果转换失败,则终止程序并显示错误。

(failure_and_run_count[:failure] / Float(failure_and_run_count[:run])) * 100.0

to_f :将数字转换为Float。如果该数字不适合Float,则结果为无穷大。

(failure_and_run_count[:failure] / failure_and_run_count[:run].to_f) * 100.0

答案 1 :(得分:2)

方法to_f就是为了这个目的:

1.to_f # => 1.0
1.to_f.class # => Float

在你的例子中:

failure_and_run_count[:failure] / failure_and_run_count[:run].to_f * 100.0

只需要将一个操作数显式强制转换为Float,因为当您调用/方法时,另一个操作数会自动强制执行。

请注意,因为可能会发生令人讨厌的事情:

''.to_f # => 0.0
nil.to_f # => 0.0
'foo'.to_f # => 0.0

答案 2 :(得分:1)

Float (failure_and_run_count[:failure])