Ruby 如何生成百分比范围内的数字?
我正在做一个文字冒险游戏,必须随机统计我的英雄的敌人 有没有办法从百分比范围内生成一个随机整数?Ruby 如何生成百分比范围内的数字?,ruby,Ruby,我正在做一个文字冒险游戏,必须随机统计我的英雄的敌人 有没有办法从百分比范围内生成一个随机整数? 比如:BaseHealth±10%,其中BaseHealth是一个变量。我现在明白你的意思了 您可以这样做: BaseHealth = ( rand(BaseHealth * 0.2) + BaseHealth*0.9 ).to_i 我现在明白你的意思了 您可以这样做: BaseHealth = ( rand(BaseHealth * 0.2) + BaseHealth*0.9 ).to_i 这
比如:BaseHealth±10%,其中BaseHealth是一个变量。我现在明白你的意思了 您可以这样做:
BaseHealth = ( rand(BaseHealth * 0.2) + BaseHealth*0.9 ).to_i
我现在明白你的意思了 您可以这样做:
BaseHealth = ( rand(BaseHealth * 0.2) + BaseHealth*0.9 ).to_i
这可以通过一些基本算法来实现:
TotalHealth = BaseHealth + (BaseHealth * (rand(21)-10)/100)
这将获取BaseHealth并将其乘以一个随机数0..20
减去10
,转换为百分比
假设BaseHealth=20:
- 如果
返回17,则得到rand
so7/100=.07
TotalHealth=21.41
- 如果
返回7,则得到rand
so-7/100=-.07
TotalHealth=18.6
- 这可以通过一些基本算法来实现:
TotalHealth = BaseHealth + (BaseHealth * (rand(21)-10)/100)
这将获取BaseHealth并将其乘以一个随机数0..20
减去10
,转换为百分比
假设BaseHealth=20:
- 如果
返回17,则得到rand
so7/100=.07
TotalHealth=21.41
- 如果
返回7,则得到rand
so-7/100=-.07
TotalHealth=18.6
这是假设运行状况为整数。如果
BaseHealth
为整数
def take_random base, percent
d = (base * percent / 100.0).to_i
base - d + rand(d * 2)
end
take_random(BaseHealth, 10)
或者按照Stefan的建议
def take_random base, percent
d = (base * percent / 100.0).to_i
rand(base - d..base + d)
end
take_random(BaseHealth, 10)
如果
BaseHealth
为整数
def take_random base, percent
d = (base * percent / 100.0).to_i
base - d + rand(d * 2)
end
take_random(BaseHealth, 10)
或者按照Stefan的建议
def take_random base, percent
d = (base * percent / 100.0).to_i
rand(base - d..base + d)
end
take_random(BaseHealth, 10)
当然乘法并转换成整数,再加/减。但那会是一个预定义的数字吗?我想在BaseHealth-10%和BaseHealth+10%之间选择一个随机数。所以如果BaseHealth是20,这将是18到22之间的任何数字。所以你需要一个随机数0-5(在本例中)+18,对吗?这是数学和随机数,两者都可以搜索:)看看你能想出什么。好的,谢谢。我只是想知道是否有兰德(10±20%)是一个整数。乘法并转换成整数,再加/减。但那会是一个预定义的数字吗?我想在BaseHealth-10%和BaseHealth+10%之间选择一个随机数。所以如果BaseHealth是20,这将是18到22之间的任何数字。所以你需要一个随机数0-5(在本例中)+18,对吗?这是数学和随机数,两者都可以搜索:)看看你能想出什么。好的,谢谢。我只是想知道是否有像兰德(10±20%)这样的东西是
BaseHealth
一个整数?不,这总是会让我多出10%。我想要的是这样的东西:兰德(#{BaseHealth.to#I}±10%)不,如果你仔细想想,它不会。。由于随机数是在0%和20%之间生成的,因此将扣除10%(实际上),这将得到一个介于-10%和10%之间的随机数,根据概率公理,我在200:184.0181.0180.0216.0193.0191.0194.0212.0203.0193.0上运行了10次,在100:91.096.0104.0106.098.097.01000.090上运行了10次。0@Marco普林斯:这仍然不太正确,因为OP要求整数。很容易修复(使用.to_i
或.round
对结果进行修复)不,这通常会使我多出10%。我想要的是这样的东西:兰德(#{BaseHealth.to#I}±10%)不,如果你仔细想想,它不会。。由于随机数是在0%和20%之间生成的,因此将扣除10%(实际上),这将得到一个介于-10%和10%之间的随机数,根据概率公理,我在200:184.0181.0180.0216.0193.0191.0194.0212.0203.0193.0上运行了10次,在100:91.096.0104.0106.098.097.01000.090上运行了10次。0@Marco普林斯:这仍然不太正确,因为OP要求整数。很容易修复(使用.to_i
或.round
对结果)rand(20)
永远不会是20。因此,您没有达到BaseHealth+10%
。你在做整数运算,所以TotalHealth
应该是21
而不是21.41
rand(20)
永远不会是20。因此,您没有达到BaseHealth+10%
。你在做整数运算,所以TotalHealth
应该是21
而不是21.41
。虽然这是正确的,但创建一个可能巨大的连续整数数组感觉。。。错。虽然这工作正常,但创建一个可能巨大的连续整数数组感觉。。。错误。或rand(base-d..base+d)
或rand(base-d..base+d)