Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby 如何生成百分比范围内的数字?_Ruby - Fatal编程技术网

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:

  • 如果
    rand
    返回17,则得到
    7/100=.07
    so
    TotalHealth=21.41
  • 如果
    rand
    返回7,则得到
    -7/100=-.07
    so
    TotalHealth=18.6

    • 这可以通过一些基本算法来实现:

      TotalHealth = BaseHealth + (BaseHealth * (rand(21)-10)/100)
      
      这将获取BaseHealth并将其乘以一个随机数
      0..20
      减去
      10
      ,转换为百分比

      假设BaseHealth=20:

      • 如果
        rand
        返回17,则得到
        7/100=.07
        so
        TotalHealth=21.41
      • 如果
        rand
        返回7,则得到
        -7/100=-.07
        so
        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)