有人可以帮我解决这个问题吗?在下面的代码中,circx
和circy
已正确初始化,但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);
这没有任何意义!
答案 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);