Ruby – 如何将混合数转换为浮点数?

我需要将混合数转换为浮点数,例如:1 1/2到1.5。

在ruby中有没有内置的方法来实现同样的目的?

您可以拆分成碎片,将碎片转换为Rational ,合并Rational,并将结果转换为Float:

s = '1 1/2' f = s.split.map { |r| Rational(r) }.inject(:+).to_f # 1.5 

如果你知道字符串总是有两个部分,那么你可以分别处理这些部分:

 s = '1 1/2' a = s.split f = a.first.to_i + Rational(a.last).to_f # 1.5 

如果你不确定会有多少部分(即'1''3/2''11 23/42' ,……都是可能的话),那么第一个应该适用于所有情况。

内核#Rational将引发ArgumentError,如果它无法解析字符串,那么您可能希望将整个事物包装在begin / except块中以处理错误。

 s = '1 1/2' w, e, d = s.strip.match(/\A(\d+)?\s*(?:(\d+)\/(\d+))?\z/).to_a.drop(1).map(&:to_f) w + (e / d) # => 1.5