为何Ruby中除法运算符持续返回0?如何修复该问题?
问题修复:chances变量始终返回0的解决办法
我明白你的问题啦——你这里遇到的是Ruby整数除法的特性导致的问题,和rand函数本身没关系哦。
问题原因
在Ruby里,当两个整数做除法运算时,它会自动舍去小数部分,只返回整数结果。举个例子:如果p1Overall是90,p2Overall是110,那90/(90+110)等于0.45,但整数除法会直接把小数部分砍掉,返回0。这就是为什么你的chances变量总是输出0。
修复方案
你只需要把除法运算中的任意一个操作数转换成浮点数,就能触发Ruby的浮点数除法,得到正确的小数结果。这里有两种简单的修改方式:
把
p1Overall转换成浮点数:chances = p1Overall.to_f / (p1Overall + p2Overall)把总和转换成浮点数:
chances = p1Overall / (p1Overall + p2Overall).to_f
如果你需要更精确的分数形式(而不是近似的浮点数),也可以用Ruby的Rational类来存储这个概率:
chances = Rational(p1Overall, p1Overall + p2Overall)
这个方法会保存精确的分数值,后续你可以通过to_f方法把它转换成浮点数,或者直接用于计算。
比如测试一下:假设p1Overall是75,p2Overall是125,用第一种方法计算的话,75.to_f / 200会返回0.375,这就是你想要的实际概率值啦。
内容的提问来源于stack exchange,提问作者Ryan
相关产品推荐
相关产品推荐

