2016-11-08 37 views
1

我知道这可能是在别的地方回答过的,但我找不到和我一样有问题的人。我试图在它后面生成一个有两位小数的随机数,但有时它会输出一个更高的值,然后是最大值。Math.random()比它应该高于?

((Math.random() * 4) + 1.8).toFixed(2); 

出于某种原因,而不是将其产生4和1.8之间的数,它有时变为高于四到像5.25例如一个值。有什么我做错了吗?一切看起来都很好,我不明白为什么它不工作。任何帮助,将不胜感激:)

回答

2

4乘法会产生04之间的数字,并添加1.8将使1.85.8之间的随机数。要生成一个介于1.84之间的随机数,您需要乘以范围的差异。

((Math.random() * (4 - 1.8)) + 1.8).toFixed(2); 
//    --^^^^^^^^^^-- 
+1

非常感谢!对不起,如果我浪费了任何人的时间,或者这是对另一件事的重复问题,但我无法想象出这一点为我的生活。我无法相信这是如此简单! –

0

Math.random()生成0和1之间的数字想象它生成0.9。然后(0.9 * 4) + 1.85.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.

0

((Math.random() * 4) + 1.8).toFixed(2);

这部分是在括号中,所以将首先评估:(Math.random() * 4)

,给你一个在0到4之间。

然后,您将1.8加到它,这意味着您将有一个结果在1.8和5.8之间,小数点后舍入到2位数。

我希望这能回答你为什么不能正常工作的问题,并且你现在可以得到你的解决方案。