我有一个要使用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') 给了我想要的结果,但我不想在字符串中插入任何东西(我准备好在必要时包装它).
不知道怎样才能解决问题?
它在这里使用Rational#to_f:
Rational('44/5').to_f # => 8.8
'44/5'.to_r.to_f # => 8.8
Run Code Online (Sandbox Code Playgroud)
您还可以mathn在Ruby的核心库中使用:
require 'mathn'
res = eval('44/5') #=> (44/5)
res.to_f #=> 8.8
Run Code Online (Sandbox Code Playgroud)
该库将在适当时自动转换为有理数。
| 归档时间: |
|
| 查看次数: |
198 次 |
| 最近记录: |