为什么我的除法运算符会保持返回零?

时间:2018-05-17 18:24:44

标签: ruby random division

当我打印“机会”的结果时,它会一直返回值“0”。我不确定它是否与我使用rand运算符有关。我如何解决这个问题,以便它返回实际值而不是0?

    p1Health = rand(50..100).to_i
    p1Attack = rand(25..50).to_i
    p1Overall = (p1Health + p1Attack).to_i

    p2Health = rand(50..100).to_i
    p2Attack = rand(25..50).to_i
    p2Overall = (p2Health + p2Attack).to_i

    p1p2 = p1Overall + p2Overall

    chances = p1Overall / (p1Overall + p2Overall)

3 个答案:

答案 0 :(得分:1)

在计算chances时,您正在进行整数除法,这将返回向下舍入到最接近的整数的结果。在这种情况下,您会看到0因为您的结果是百分比(因为它小于1,它在整数除法中向下舍入为0)。

要返回实际值,您需要将其中一个整数转换为Float,如下所示:

chances = p1Overall / (p1Overall + p2Overall).to_f

希望这有帮助!

答案 1 :(得分:1)

在Ruby中,整数除以整数会产生整数结果。那就是:

1 / 2
# => 0

0是最接近整数的答案。有什么不同的是:

5 / 2
# => 2

这基本上是2.5舍入到2。

如果你想要一个浮点结果:

chances = p1overall.to_f / (p1overall + p2overall)

.to_f首先转换为浮点数。结果就产生了一个浮点答案。

答案 2 :(得分:1)

在大多数语言中(c,c ++,java,ruby,python ..等等)integer/integer会产生integer结果。 你必须使用至少一个值作为浮动。

这是许多语言使用的基本惯例:

该操作执行:

integer + integer => integer
integer - integer => integer
integer / integer => integer
integer * integer => integer  
float + integer => float
integer + float => float
float / integer => float
integer / float => float