我正在尝试使用一个简单示例的eval函数:
<% a = 5 %>
<% b = 4 %>
<%= eval("((a+b)/b)") %>
我希望结果为2.25,但上面给出2.下面的代码给出2.25但不是很优雅
<% a = 5 %>
<% b = 4 %>
<%= eval("((a.to_f+b.to_f)/b.to_f)") %>
如何让eval以更好的方式返回带小数位的数字?
答案 0 :(得分: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中进行除法时,您需要将dividend 或除数设置为float来触发浮点运算。
答案 1 :(得分:1)
仅使用Fixnum#to_f
一个或乘以1.0
的任何值:
(a*1.0+b)/b
或
(a.to_f+b)/b
答案 2 :(得分:1)
您只需要将除数转换为像
一样浮点数<% a = 5 %>
<% b = 4 %>
<%= eval("((a+b)/b.to_f)") %>
无论如何, eval 只是在字符串中计算Ruby表达式。我认为你根本不需要它。
<%= (a+b)/b.to_f %>