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/