【问题标题】:Why did they use 101 instead of 100? with Math.random()?为什么他们使用 101 而不是 100?使用 Math.random()?
【发布时间】:2021-08-02 12:53:48
【问题描述】:

我刚开始通过 w3schools 学习 java,其中一种方法(?)是 Math.random(),他们有这个例子:

我不太清楚他们为什么这样做Math.random() * 101。为什么他们使用 101 而不是 100?

谢谢

【问题讨论】:

  • 我不明白为什么这被标记为另一个问题的重复?他们看起来和我不一样。
  • 简短答案:转换为整数的任何小数位的整数切割,并且由于 Math.random 本身不会返回 1.0,因此将 Math.random 返回的值乘以 100 将得到最大值 99.999 .... 当转换为 int 时变为 99。由于随机生成的数字应该包括 100,因此您必须乘以 101。乘以 100 将导致最大 int 值为 99。
  • 为了以后参考,代码不要放图片,应该是文字。

标签: java math random


【解决方案1】:

来自Oracle documentation

返回一个带正号的双精度值,大于或等于 0.0 且小于 1.0。

因此,表达式Math.random() * 101 的计算结果为 0 到小于 101 范围内的某个浮点数。由于转换为整数会截断,而不是舍入,这将减少为 0 到 100 范围内的整数,包括在内,具有(大致)均匀分布。

如果这是Math.random() * 100,则永远无法生成数字 100。从0到100有101个值,包括101。

【讨论】:

  • 本文档为 JavaScript,与 Java 无关
  • @phuclv 嗯,好点,我什至没有注意到标签,我看到它是因为math。它恰好是相同的答案(因为我见过的每个类似的函数都有相同的行为方式),但我会更新源代码。
【解决方案2】:

random 方法生成0 and .9999999... 之间的随机数。如果你乘以 101,你会得到 0 and 100.999999... 之间的值。假设生成的最大可能数字为(int)(100.9999999...),这将导致100,因为当转换为int 时,分数将被丢弃。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-02-18
    • 1970-01-01
    • 2012-02-21
    • 2010-09-28
    • 2011-09-30
    • 1970-01-01
    • 1970-01-01
    • 2015-06-16
    相关资源
    最近更新 更多