不知道爲什麼沒有人提到過要強制float將float放在除數中。即
eval('44/5')
#=> 8
eval('44/5.0')
#=> 8.8
但如果你缺乏對字符串時,它可能會更困難,但控制這樣的工作
eval('44/5'.split("/").map(&:to_f).join("/"))
#=> 8.8
使用eval
pattern = /([0-9]\.?[0-9]+|[0-9]+|[+-\/*\(\)])/
str = "2+3/4"
str.scan(pattern).flatten.map{|e| e =~(/[0-9]/) ? e.to_f : e}
#=> [2.0,"+",3.0,"/",4.0]
str.scan(pattern).flatten.map{|e| e =~(/[0-9]/) ? e.to_f : e}.join
#=> "2.0+3.0/4.0"
eval(str.scan(pattern).flatten.map{|e| e =~(/[0-9]/) ? e.to_f : e}.join)
#=> 2.75
工程用括號過於處理多個arthimitic符號和現有浮標
str = "(2+3)/4"
eval(str.scan(pattern).flatten.map{|e| e =~(/[0-9]/) ? e.to_f : e}.join)
#=> 1.25
str = "(2.3+1)/4"
eval(str.scan(pattern).flatten.map{|e| e =~(/[0-9]/) ? e.to_f : e}.join)
#=> 0.825
版本與Rational方法
str = "(2.3+3)/4*2"
str.to_r.to_f
#=>0.0
eval(str.scan(pattern).flatten.map{|e| e =~(/[0-9]/) ? e.to_f : e}.join)
#=> 2.65
無需附加的庫很簡單。
這是輝煌的+1爲知識認爲這需要添加到紅寶石文檔 – bjhaid
@bjhaid它是在文檔;-)我已經鏈接到它。 –
該文檔並沒有解釋你得到一個Rational對象(對象類型),它不是一些人的直接,只需要檢查pry/irb知道它是一個理性的對象 – bjhaid