如何使eval返回带小数位的数字?

Zak*_*off 1 ruby eval

我正在尝试使用一个简单示例的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以更好的方式返回带小数位的数字?

Cas*_*per 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
Run Code Online (Sandbox Code Playgroud)

编辑

进一步澄清 - 它实际上与其eval本身无关.这就是Ruby(以及大多数其他语言)处理算术表达式的方式.大多数表达式默认使用整数运算.

在Ruby中进行除法时,你只需将被除数除数浮动来触发浮点运算.