我的JavaScript随机数始终初始化为1?

时间:2014-04-21 18:36:36

标签: javascript

有人可以帮我解决这个问题吗?在下面的代码中,circxcircy已正确初始化,但theta始终初始化为1!每次加载页面时,控制台都会记录theta = 1

var circx = Math.floor(Math.random() * Number.MAX_VALUE) % papwidth;
var circy = Math.floor(Math.random() * Number.MAX_VALUE) % papheight;
/*
    circx, circy: initial positions of circle on the papern
*/
var mycirc = paper.circle(circx, circy, 10);
mycirc.attr("fill","#F9C624");
var theta = Math.floor(Math.random() * Number.MAX_VALUE) % 4 + 1; 
/*
    theta = 1 <---> object moving at a 45-degree angle
    theta = 2 <---> object moving at a 135-degree angle
    theta = 3 <---> object moving at a 225-degree angle
    theta = 4 <---> object moving at a 315 degree angle
*/

console.log("theta = " + theta);

这没有任何意义!

2 个答案:

答案 0 :(得分:7)

> Math.random() * Number.MAX_VALUE
8.365923028455995e+307

你看到e+307?这意味着它以307个零结束。双精度不以整数精度存储。拿那个mod 4并加1,你总是得到1.(或者你做99.99999 ...%的时间)。

答案 1 :(得分:4)

var theta = Math.round(Math.random() * 3) + 1;

应该可以正常工作。

<强>附录:

正如Tom Fenech指出的那样,Math.random()会产生一个从0(包括)到1(不包括)的数字,这样可以提供更直观的解决方案:

var theta = Math.ceil(Math.random() * 4);