当我打印“机会”的结果时,它会一直返回值“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)
答案 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