如何将一个分数转换为在ruby中浮动

我有一个字符串"1/16"我想将它转换为float并将其乘以45 。 但是,我没有得到预期的结果。

我正在尝试script/console

 >> "1/16".to_f => 1.0 >> "1/16".to_f*45 => 45.0 

我怎样才能得到2.81的预期结果

更大的图片:我有这样的下拉:

  

每当用户选择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 

@Farrel是对的,因为Ruby 1.9包含Rational和String有一个to_r -method事情更容易:

 puts ("1/16".to_r * 45).to_f #=> 2.8125 puts ("1/16".to_r * 45).to_f.round(2) #=> 2.81 

在2.0中,理性文字变得更加容易:

 1/16r # => (1/16)