为什么我的除法运算符一直返回零?

Why does my division operator keep returning a zero?

当我打印 "chances" 的结果时,它保持 returning 值为“0”。我不确定这是否与我使用 rand 运算符有关。我该如何解决这个问题,使其 return 成为实际值而不是 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)

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

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

chances = p1Overall / (p1Overall + p2Overall).to_f

希望对您有所帮助!

在 Ruby 中,一个整数除以一个整数得到一个整数结果。即:

1 / 2
# => 0

其中 0 是最接近的整数答案。不同之处在于:

5 / 2
# => 2

基本上是 2.5 四舍五入为 2。

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

chances = p1overall.to_f / (p1overall + p2overall)

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

在大多数语言中(c、c++、java、ruby、python ..etc)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