Ruby 为什么eval(';7/14';)返回0.0?

Ruby 为什么eval(';7/14';)返回0.0?,ruby,Ruby,我必须对字符串求值才能得到结果。比如说, eval('5*6.45').to_f # => 32.25 这是意料之中的事 为什么我会得到: eval('7/14').to_f # => 0.0 而不是0.5?如何获得适当的值?在我的游戏(GUI)中,我应该有14,而不是14.0 eval('7/14') 与 7/14 它是0(整数除法)。将0转换为浮点将导致零作为浮点,即0.0 如果你愿意写(即) ,你会得到想要的结果 与 7/14 它是0(整数除法)。将0转换为浮点将导致

我必须对字符串求值才能得到结果。比如说,

eval('5*6.45').to_f # => 32.25
这是意料之中的事

为什么我会得到:

eval('7/14').to_f # => 0.0
而不是
0.5
?如何获得适当的值?在我的游戏(GUI)中,我应该有
14
,而不是
14.0

eval('7/14')

7/14
它是0(整数除法)。将0转换为浮点将导致零作为浮点,即0.0

如果你愿意写(即)

,你会得到想要的结果

7/14
它是0(整数除法)。将0转换为浮点将导致零作为浮点,即0.0

如果你愿意写(即)



,您将得到所需的结果。

这是因为(绝对值)7小于(绝对值)14。这等于0。然后,转换为float的0是0.0。

这是因为(绝对值)7小于(绝对值)14。这等于0。然后,转换为float的0是0.0。

因为您在执行整数除法后将结果转换为float。你需要正确地解析用户输入以得到你想要的答案,而不仅仅是
eval
it。你为什么认为应该得到0.5?@sawa:因为常识:)GUI计算器就是这样做的。@SergioTulentsev Ruby不是GUI计算器。但我正在制作一个类似GUI计算器的游戏。。。我必须让Ruby像GUI计算器一样工作,否则玩家会输掉游戏,因为你在执行整数除法后将结果转换为浮点。你需要正确地解析用户输入以得到你想要的答案,而不仅仅是
eval
it。你为什么认为应该得到0.5?@sawa:因为常识:)GUI计算器就是这样做的。@SergioTulentsev Ruby不是GUI计算器。但我正在制作一个类似GUI计算器的游戏。。。我必须让Ruby像GUI计算器一样工作,否则玩家将输掉游戏你的第二句话跟不上第一句话。:)实际答案是:“因为整数除法”我的第二句话是在第一句话中表达的第一步之后执行的第二步。有一个缺失的位,实际上是在问题中问到的:“为什么它等于0”?这在ruby中是什么意思。它在其他语言中有别的意思。如果OP来自,比如说,JS,我会有点惊讶。“整数除法[…]就是/意思”/“它在ruby中的意思”——即使在ruby
/
中,只有当两个操作数都是整数时,它才意味着整数除法。OP显然必须同时处理整数和十进制数。你的第二句话不是从第一句开始的。:)实际答案是:“因为整数除法”我的第二句话是在第一句话中表达的第一步之后执行的第二步。有一个缺失的位,实际上是在问题中问到的:“为什么它等于0”?这在ruby中是什么意思。它在其他语言中有别的意思。如果OP来自,比如说,JS,我会有点惊讶。“整数除法[…]就是/意思”/“它在ruby中的意思”——即使在ruby
/
中,只有当两个操作数都是整数时,它才意味着整数除法。运算显然必须同时处理整数和十进制数。是的,我发现了。但是有没有办法我能完成7/14,得到0.5分?以某种方式我正在使用Ruby2D(类似于Lumosity的Raindop)制作一个需要操作的游戏。@s.Goswami如果所有其他操作都失败,您可以编写一个自定义解析器/计算器。虽然那是相当多的工作。是的,那是相当多的工作。看看我能不能用Ruby内置的东西!您可以执行
7/14r
,这不是真正的
0.5
,而是等效于它
eval(“7/14”+“r”)。to_f
0.5
@S.Goswami:无论如何,你必须解析用户的输入,否则有人会为了好玩而输入一个字符串进行评估,这将导致在你的主目录下删除。因此,如果您将用户的字符串拆分以检查有害部分,您将获得输入的数字,如果其中一个不是整数,您可以用相应的浮点替换它。当然,另一个问题是是否所有的计算都要用float,因为这可能会导致不精确的结果。是的,我发现了。但是有没有办法我能完成7/14,得到0.5分?以某种方式我正在使用Ruby2D(类似于Lumosity的Raindop)制作一个需要操作的游戏。@s.Goswami如果所有其他操作都失败,您可以编写一个自定义解析器/计算器。虽然那是相当多的工作。是的,那是相当多的工作。看看我能不能用Ruby内置的东西!您可以执行
7/14r
,这不是真正的
0.5
,而是等效于它
eval(“7/14”+“r”)。to_f
0.5
@S.Goswami:无论如何,你必须解析用户的输入,否则有人会为了好玩而输入一个字符串进行评估,这将导致在你的主目录下删除。因此,如果您将用户的字符串拆分以检查有害部分,您将获得输入的数字,如果其中一个不是整数,您可以用相应的浮点替换它。当然,另一个问题是是否所有的计算都使用浮点,因为这可能会导致不精确的结果。