Ruby整数除法致WoTLK护甲计算返回0的问题咨询
问题:Ruby整数除法导致计算结果为0的原因分析
核心原因:Ruby的整数除法规则
Ruby中如果除法的两个操作数都是整数,会执行整数除法——只保留商的整数部分,直接舍去小数部分。
举个例子,假设你输入的护甲值是24000(能算出59.5左右的结果),那24000 / (24000 + 16635)就是24000 / 40635,整数除法的结果是0,再乘以100自然还是0。
而把16635改成16635.0后,这个数值变成了浮点数,此时除法会触发浮点除法,计算时整数会自动转为浮点数参与运算,得到精确的小数结果,再乘以100就输出了正确的百分比。
结合你的代码具体分析
你通过to_i把输入的护甲值转成了整数,当执行纯整数除法时:
result = ((armor / (armor + 16635)) * 100)
因为armor肯定小于armor + 16635,分子小于分母,整数除法的结果必然是0,最终输出0。
改成16635.0后,armor + 16635.0的结果是浮点数,armor会被自动转为浮点数,除法得到小数结果,乘100后就是正确的数值。
可选优化方案
除了把其中一个数改成浮点数,还有几种方式可以触发浮点除法:
- 将
armor转为浮点数后计算:armor.to_f / (armor + 16635) - 用
Float()包装运算数:armor / Float(armor + 16635) - 使用Ruby 2.4+提供的
fdiv方法:armor.fdiv(armor + 16635)
比如修改BossArmor方法:
def BossArmor(armor) result = (armor.fdiv(armor + 16635) * 100) puts result end
这样即使操作数都是整数,也能直接得到浮点运算结果。
内容的提问来源于stack exchange,提问作者Seniorbubble
相关产品推荐
相关产品推荐

