Ruby eval没有圆形

Ale*_*der 1 ruby

我有一个要使用ruby eval评估的清理字符串.该字符串可以包含任何简单的算术公式,如'44/5'.

问题是结果eval('44/5')将是8(而不是8.8).

它作为评估的一部分发生(因为1.0*eval('44/5')给出8.0).

我没有为eval找到任何额外的参数来管理它.

我甚至尝试将字符串前置或包装以将其转换为:

'0.0+44/5'
Run Code Online (Sandbox Code Playgroud)

要么

'1.0*(44/5)'
Run Code Online (Sandbox Code Playgroud)

但它仍然没有给我8.8.

eval('44.0/5') 给了我想要的结果,但我不想在字符串中插入任何东西(我准备好在必要时包装它).

不知道怎样才能解决问题?

Aru*_*hit 7

它在这里使用Rational#to_f:

Rational('44/5').to_f # => 8.8
'44/5'.to_r.to_f # => 8.8
Run Code Online (Sandbox Code Playgroud)

  • String有一个`to_r`方法:'44 /5'.to_r (2认同)

Pat*_*ity 5

您还可以mathn在Ruby的核心库中使用

require 'mathn'

res = eval('44/5')      #=> (44/5)
res.to_f                #=> 8.8
Run Code Online (Sandbox Code Playgroud)

该库将在适当时自动转换为有理数。