【问题标题】:Is it possible for Math.random() to return a value greater than 1? [duplicate]Math.random() 是否有可能返回大于 1 的值? [复制]
【发布时间】:2017-03-01 07:03:32
【问题描述】:

是否可以返回像 1.125155 这样的值,它是大于 1 的双精度值?

我的代码:

Math.random()

【问题讨论】:

  • random.nextDouble() ?
  • 它有可能在 1.0 中类似于 math.random 吗?
  • 你需要明确你想要什么你想要返回什么值?您希望值在某个范围内均匀分布,还是需要其他分布?
  • 返回一个带正号的double值,大于等于0.0小于1.0
  • 你想要什么;多个值或大于 1 的值??

标签: java math random lang


【解决方案1】:

如果您使用的是 java.lang.Math,这是不可能的。 (Read Doc)

【讨论】:

  • public static double random() { return RandomNumberGeneratorHolder.randomNumberGenerator.nextDouble(); } 使用这个可能吗?
  • private static final class RandomNumberGeneratorHolder { static final Random randomNumberGenerator = new Random(); }
  • @valamanoj 也许你能解释一下你想要达到什么目标?
  • 上面随机方法的内部实现,你能告诉我,得到 1 之后的值是可能的吗?
  • @valamanoj 不,这是不可能的。您可以使用结果来获取某个范围(例如 0-2 或 0-100)之间的值,但您必须自己实现。
【解决方案2】:

你可以这样做:

 Random ran = new Random();
 double x = ran.nextDouble() + 1

x 现在是double 值大于 1 的随机数。

【讨论】:

  • x=2*ran.nextDouble() 在大约一半的情况下会大于1
【解决方案3】:

您可以像这样使用BigDecimal 移动小数位...

Random ran = new Random();
double result = BigDecimal.valueOf(ran.nextDouble()).movePointRight(1).doubleValue()

如果您不必转换回double,代码会更简洁,并且如果您计划在进一步计算中使用返回值,您将可以更好地控制舍入问题(以上我已转换回到两倍,因为这是您的 OP 要求的)

【讨论】:

    【解决方案4】:

    Math.random() 从 [0,1] 返回一个 double;因此,要让它返回一个大于 0 的数字,您必须做几件事中的一件

    Math.random() + 1 从 [0+1, 1+1] 或 [1,2] 返回一个数字

    Math.random() * 2 从 [0*2, 1*2] 或 [0,2] 返回一个数字

    【讨论】:

      【解决方案5】:

      如果您想使用两个可能应该是随机且永远不会相同的值(随机函数有时在执行两次时会给出相同的值),则有一种解决方法,然后将您的值放入列表并使用 list.shuffle( ) 希望这会有所帮助。

      【讨论】:

      • 我不认为这是他的问题。但很难说。
      • 是的,它与我的问题无关。我的问题很简单 math.random() 有可能在 java 7/8 中返回 1.0 这样的东西。
      • 洗牌和从 Math.random() 中获取随机值是完全不同的。
      • @valamanoj 每个人都认为“超过 1”意味着两个或多个不同的值,而不是大于 1 的值。我已经编辑了标题。我希望我明白你想问什么。
      • @ajb 是的,你改变它..
      猜你喜欢
      • 1970-01-01
      • 2011-11-13
      • 2021-07-11
      • 1970-01-01
      • 1970-01-01
      • 2015-09-24
      • 1970-01-01
      • 2012-02-23
      • 1970-01-01
      相关资源
      最近更新 更多