Javascript Math.random()的值比预期的高?
我知道这个问题以前可能在其他地方得到过回答,但我找不到任何人有和我一样的问题。我试图生成一个后面有两个小数位的随机数,但有时它会输出一个高于最大值的值Javascript Math.random()的值比预期的高?,javascript,Javascript,我知道这个问题以前可能在其他地方得到过回答,但我找不到任何人有和我一样的问题。我试图生成一个后面有两个小数位的随机数,但有时它会输出一个高于最大值的值 ((Math.random() * 4) + 1.8).toFixed(2); 出于某种原因,它不是生成一个介于4和1.8之间的数字,而是有时会高于4,达到一个类似于5.25的值。我做错什么了吗?我觉得一切都很好,我不明白为什么它不起作用。如果有任何帮助,我们将不胜感激:)与4相乘将生成一个介于0和4之间的数字,添加1.8将生成一个介于1.8和
((Math.random() * 4) + 1.8).toFixed(2);
出于某种原因,它不是生成一个介于4和1.8之间的数字,而是有时会高于4,达到一个类似于5.25的值。我做错什么了吗?我觉得一切都很好,我不明白为什么它不起作用。如果有任何帮助,我们将不胜感激:)与
4
相乘将生成一个介于0
和4
之间的数字,添加1.8
将生成一个介于1.8
和5.8
之间的随机数。要生成介于1.8
和4
之间的随机数,需要乘以范围差
((Math.random() * (4 - 1.8)) + 1.8).toFixed(2);
// --^^^^^^^^^^--
Math.random()
生成0到1之间的数字。假设它生成0.9
。然后(0.9*4)+1.8
就是5.4
。问题是你要乘以4,然后在4的上面再加上更多。要解决此问题,可以使用
((Math.random() * (4 - 1.8)) + 1.8).toFixed(2)
然后,如果Math.random()
产生0.9
,结果将是(0.9*2.2)+1.8
,即3.78
,小于4。((Math.random()*4)+1.8)。toFixed(2)代码>
这部分在括号中,因此将首先计算:(Math.random()*4)
这会给你一个介于0和4之间的数字
然后,将其加上1.8,这意味着您将得到一个介于1.8和5.8之间的结果,四舍五入到小数点后的2位数字
我希望这能回答您的问题,即为什么它不起作用,并且您现在可以导出您的解决方案。非常感谢!对不起,如果我浪费了任何人的时间,或者这是一个与其他问题重复的问题,但我就是无法用我的一生来理解这一点。我真不敢相信它这么简单!