2012-04-28 8 views
1

私は簡単な例でeval関数を実行しようとしています:私は結果は2.25になりたいが、上記下の2のコードはevalは小数点以下の桁数を返すことができますか?

<% a = 5 %> 
<% b = 4 %> 
<%= eval("((a.to_f+b.to_f)/b.to_f)") %> 
を2.25を与えるが、非常にエレガントではありません与え

<% a = 5 %> 
<% b = 4 %> 
<%= eval("((a+b)/b)") %> 

evalは小数点以下の桁数をより良い方法で返すことができますか?

答えて

5

必要なのは、浮動小数点するとRubyの代わりに、デフォルトの整数演算の式に浮動小数点演算を使用することを理解する除算の分母である:

irb(main):001:0> a = 5 
irb(main):002:0> b = 4 
irb(main):003:0> a/b 
=> 1 
irb(main):004:0> a/b.to_f 
=> 1.25 
irb(main):005:0> (a + b)/b.to_f 
=> 2.25 

編集

さらに明確にするには - 実際にはevalとは関係がありません。これは、Ruby(そして他のほとんどの言語)が算術式を処理する方法です。ほとんどの式は、デフォルトで整数演算で行われます。

Rubyで除算を行うときは、除算または divisorのいずれかを浮動小数点演算のトリガにする必要があります。

1

使用Fixnum#to_f 1つまたは1.0で任意の値を乗算:

(a*1.0+b)/b 

または

(a.to_f+b)/b 
1

あなただけとにかく

<% a = 5 %> 
<% b = 4 %> 
<%= eval("((a+b)/b.to_f)") %> 

のように浮かぶように除数を変換する必要があり、評価ただ評価する文字列内のRuby式私は、あなたの例でそれを必要としないと思います。

<%= (a+b)/b.to_f %> 
関連する問題