数学 ;数学随机

Math.ceil ; Math.random

提问人:lezammm 提问时间:7/23/2023 更新时间:7/23/2023 访问量:93

问:

这是一个非常基本的问题,我无法解决:

在 JS 中,如果我这样做:

Math.random() 我会得到 0 到 1 之间的随机数(包括 0,不包括 1)

所以,如果我做 Math.ceil(Math.random() * 100),我会得到 0 到 100 之间的随机数。我说得对吗?

如果 Math.random() 正好是 0,我将得到 0,这是我在文档中读到的可能。

但是,我到处都读到这样做“Math.ceil(Math.random() * 100)”,我会得到 1 到 100 之间的数字。

请问,有人可以澄清一下这种情况吗?

谢谢!

数学随机 () -> [0; 1] Math.ceil(Math.random()) -> [0; 100]

javascript 数学 随机 ceil

评论

3赞 pilchard 7/23/2023
这回答了你的问题吗?Math.random 返回 0 的几率有多大?
0赞 Arleigh Hix 7/23/2023
0.9900000000000001 * 100 = 99.00000000000001和 的上限 ,所以高于任何内容都会导致99.000000000000011000.99100
0赞 Lucas David Ferrero 7/23/2023
例如,如果您尝试执行 Math.ceil(0.1) 或 Math.ceil(0.2) 基元值,则调用 .因此,您将始终获得 100% 或 1(相同).ceil
0赞 pilchard 7/23/2023
@LucasDavidFerrero OP 在四舍五入乘以 100

答:

0赞 Evert 7/23/2023 #1

Math.random()会给你一个介于 0(含)和 1(不含)之间的随机数,但它正好是 0 的可能性非常低。

Math.ceil()四舍五入。鉴于你得到 0 的几率非常低,你可能会从 中得到高于 0 的东西,所以几乎(但不是完全)不可能从 中得到 0。Math.random()Math.ceil(Math.random()*100)

所以会给你一个很小的机会得到 0,但通常在 1 到 100(含)之间。Math.ceil(Math.random()*100))

通常你要做的是 ,它向下舍入。它没有这种边缘情况,因为永远不会给你,所以给你 100 分的机会永远不会很小。它始终是 0-99(含),均匀分布。Math.floor()Math.random()1Math.floor(Math.random()*100))

评论

1赞 some 7/23/2023
对不起,我错误地对您投了反对票,直到几分钟后才看到它,因此在帖子被编辑之前我无法撤消它。
0赞 Evert 7/23/2023
不过,我为此获得了 2 张反对票,这很奇怪。只是人们堆积如山吗?我认为这是一个有趣的答案。跆拳道
1赞 some 7/23/2023
这是一个有趣的答案。我一定是在更换窗户时不小心投了反对票。