Мне нужно преобразовать смешанное число в тип float, например, от 1 1/2 до 1,5.Ruby - Как я могу преобразовать смешанное число в float?
Есть ли встроенный метод в рубине для достижения того же?
Мне нужно преобразовать смешанное число в тип float, например, от 1 1/2 до 1,5.Ruby - Как я могу преобразовать смешанное число в float?
Есть ли встроенный метод в рубине для достижения того же?
Вы могли бы разделить на куски, конвертировать штук в Rationals, просуммировать Рациональные и преобразовать результат в 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'
... все возможно), то первый один должен работать во всех случаях.
Kernel#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