我有一个字符串,"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
Far*_*rel 17
使用Rational
>> (Rational(*("1/16".split('/').map( &:to_i )))*45).to_f
=> 2.8125
EmF*_*mFi 10
看起来你将不得不自己解析分数.这将适用于分数和整数,但不适用于混合数字(即:1½不起作用.)
class String
  def to_frac
    numerator, denominator = split('/').map(&:to_f)
    denominator ||= 1
    numerator/denominator
  end
end
"1/16".to_frac * 45
ste*_*lag 10
@Farrel是对的,因为Ruby 1.9包含Rational和String,所以to_r事情变得更容易:
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)