【问题标题】:Getting a random number between 0 and 0.06 in Java?在 Java 中获取 0 到 0.06 之间的随机数?
【发布时间】:2010-02-09 16:50:51
【问题描述】:

如何在 Java 中获得介于 0.0 和 0.06 之间的随机 Double 值?

【问题讨论】:

  • 这实际上并不像听起来那么容易。 +1
  • 当您说“介于”时,您希望将端点作为可能的返回值包含还是排除?
  • 您应该澄清您想要的是 [0,0.06] 还是 [0,0.06) 中的数字。前者的区间是闭合的(即包含端点)与后者不同,后者的值永远无法得到 0.06。
  • @AakashM, @uckelman:在这种情况下,这无关紧要,因为 0.06 不能完全表示为 double,因此无论如何都无法返回它。或者换种说法:他只能达到“[0.0, 0.6]”。
  • @Joachim Sauer:babbage.cs.qc.edu/IEEE-754/Decimal.html 建议它可以,因为它发生了(它的 1.92 / 32 和 1.92 可以用 52 位尾数精确表示)

标签: java random


【解决方案1】:

nextDouble() 返回一个随机浮点数,均匀分布在 0 和 1 之间。简单地缩放结果如下:

Random generator = new Random();
double number = generator.nextDouble() * .06;

有关 Random 的更多示例,请参阅 this documentation

【讨论】:

  • 此外,您可能需要检查该数字是否小于
  • 还要注意为您需要的每个号码都使用Random 的新实例。从这个意义上说,下面 uckelman 的答案更好,因为它专门避免了这个常见错误。
【解决方案2】:

这会给你一个区间 [0,0.06) 中的随机双精度:

double r = Math.random()*0.06;

【讨论】:

    【解决方案3】:

    为避免浮点值不精确,您可以使用更准确的双精度/整数计算(至少在 x86/x64 平台上)

    double d = Math.random() * 6 / 100;
    

    【讨论】:

      【解决方案4】:

      你需要看看Random

      【讨论】:

        【解决方案5】:

        基于this java doc(虽然注意边界条件):

         new Random().nextDouble() * 0.06
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2012-04-18
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2012-09-27
          • 2014-04-11
          • 2011-08-10
          相关资源
          最近更新 更多