javascript - Math.random() 结果的数字

标签 javascript random

for (let i = 0; i < 999; i++) {
    console.log("length-result:", (Math.random() + "").slice(2).length)
}

如果你执行这段代码,你会发现大部分结果都小于18

但是,从理论上讲,random() 结果的最后一位只有百分之十的机会为0。这意味着,只有百分之十的 length-result 可以小于 18

实时片段:

// Why are results of length 20 rare, rather than occurring ~90% of the time?

for (let i = 0; i < 999; i++) {
  const str = Math.random() + '';
  tbody.insertAdjacentHTML('beforeend', `<tr><td>${str.length}</td><td>${str}</td></tr>`);
}
td {
  padding-right: 20px;
}
<table>
  <tbody id="tbody">
  </tbody>
</table>

你能告诉我是什么导致了 Math.random 的这种行为吗?

最佳答案

您正在检查小数点后的位数。与随机无关。

JavaScript 数字始终存储为 double float (64 位),遵循国际 IEEE 754 标准。 https://en.wikipedia.org/wiki/IEEE_754

从该链接的部分:字符表示:

The original binary value will be preserved by converting to decimal and back again using:[38]

  • 5 decimal digits for binary16
  • 9 decimal digits for binary32
  • 17 decimal digits for binary64 -> used in javascript
  • 36 decimal digits for binary128

关于javascript - Math.random() 结果的数字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57404317/

相关文章:

javascript - 使用下划线 (_) 为未使用的参数添加前缀的原因是什么?

c# - 如何从二维数组中随机选择一个位置?

Python 脚本不通过命令行运行

Python随 secret 码生成器随机不起作用

c++ - C++中如何改变数组的顺序

javascript - 如何区分点击处理程序?

javascript - 如何遍历无序列表然后选择列表项的父div

javascript - 尽管 URL 正确,Angular Router 仍不加载我的组件

javascript - $document.find 无法正常工作

c - 如何在C中将随机字符放入多维数组中