У меня есть строка "1/16"
Я хочу преобразовать его, чтобы пустить в ход и умножить его на 45
. Однако я не получаю желаемые результаты.
Я пробую в script/console
>> "1/16".to_f
=> 1.0
>> "1/16".to_f*45
=> 45.0
как я могу получить желаемый результат 2.81
Большее изображение: у Меня есть выпадающее как это:
<%=select_tag :volume, options_for_select(["", "1 g", "1/16 oz", "1/8 oz","1/4 oz",
"1/2 oz", "1 oz", "1/8 lb", "1/4 lb", "Single", "Multi 5" ], "N/A") %>
каждый раз, когда пользователь выбирает oz
оцените тогда, я хочу умножить его к 45
таким образом, я делаю:
first, *rest = params[:volume].to_s.split(/ /)
if rest.first=="oz"
@indprodprice = @prods.orig_price.to_i*first.to_f*28.3495
else
@indprodprice = @prods.orig_price.to_i*first.to_f*453.59237
end
Похоже, вам придется самому разбирать дробь. Это будет работать с дробями и целыми числами, но не со смешанными числами (например: 1½ не будет работать).
class String
def to_frac
numerator, denominator = split('/').map(&:to_f)
denominator ||= 1
numerator/denominator
end
end
"1/16".to_frac * 45
Используйте Rational
>> (Rational(*("1/16".split('/').map( &:to_i )))*45).to_f
=> 2.8125