我收到以下哈希:
my_hash = {a:(1/20), b:(1/26)}
但是当我看到哈希时,我得到以下内容:
irb(main):019:0> my_hash = {a:(1/20), b:(1/26)}
=> {:a=>0, :b=>0}
irb(main):020:0> my_hash
=> {:a=>0, :b=>0}
如您所见,它转换为整数(0)
我如何离开Rational,或者浮动以便我可以对my_hash.sort_by {|key, value| value}
进行排序?
答案 0 :(得分:2)
Ruby中Rational
文字的语法是<numerator>/<denominator>r
,例如1/2r
或23/42r
。你所拥有的只是整数除法:1
除以20
为0
。
my_hash = { a: 1/20r, b: 1/26r }
#=> { :a => (1/20), :b => (1/26) }
看起来你可能是一个Smalltalk或Scheme程序员,但在这些语言中情况有所不同:他们从一开始就有理性文字,Ruby只是稍后得到它们,所以它需要一个明确的注释({{1 (后缀)告诉理性文字除了整数除法之外;否则你会破坏现有的程序。
答案 1 :(得分:1)
如此定义:
my_hash = {a:(1.0/20.0), b:(1.0/26.0)}
或者:
my_hash = {a:(1.to_f/20.to_f), b:(1.to_f/26.to_f)}