我正在尝试使用一个简单示例的eval函数:
<% a = 5 %>
<% b = 4 %>
<%= eval("((a+b)/b)") %>
Run Code Online (Sandbox Code Playgroud)
我希望结果为2.25,但上面给出2.下面的代码给出了2.25,但不是很优雅
<% a = 5 %>
<% b = 4 %>
<%= eval("((a.to_f+b.to_f)/b.to_f)") %>
Run Code Online (Sandbox Code Playgroud)
如何让eval以更好的方式返回带小数位的数字?
你只需要将除法的分母作为浮点,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
Run Code Online (Sandbox Code Playgroud)
编辑
进一步澄清 - 它实际上与其eval本身无关.这就是Ruby(以及大多数其他语言)处理算术表达式的方式.大多数表达式默认使用整数运算.
在Ruby中进行除法时,你只需将被除数或除数浮动来触发浮点运算.