AS3:无法弄清楚Math.random

时间:2014-06-11 21:02:55

标签: actionscript-3 oop math random

我在数学上非常糟糕,所以我无法弄清楚为什么这不起作用。它应该计算0到360之间的随机数。

var minDegree:int = 0
var maxDegree:int = 360

function randomDegree (minDegree:Number, maxDegree:Number):Number 
{
    return (Math.random() * (maxDegree - minDegree + minDegree));
    trace(randomDegree)
}

2 个答案:

答案 0 :(得分:1)

我假设你真的想要整数,对吗?这是实际的代码:

private function randRange(minNum:Number, maxNum:Number):Number 
{
    return (Math.floor(Math.random() * (maxNum - minNum + 1)) + minNum);
}

我发布它是因为@ Xenophage的答案不正确。并且它是不正确的,因为Math.random 返回一个伪随机数n,其中0 <= n&lt; 1。reference)。这意味着,如果您将0作为最小值并360作为最大值,那么您可以获得的最大数字是359,因为:

(Math.random() * (maxDegree - minDegree) + minDegree);
(0.99999 * (360 - 0) + 0) = 359

所以上层解决方案会更好用:)如果你不是在寻找整数 - 请告诉我。

编辑:我已经随机返回更准确的数字,好像它只是0.99它会计算到354而不是359.这两种方式都不会达到360。 是的,我知道你需要学位,所以0类似于360如果你没有做一些精确的计算,但我不得不提到它,因为它是Math.random问题,而不是学位问题。

答案 1 :(得分:0)

你非常接近,将右括号移动一点。乘以max和min之间的差值,然后再加上min,将值恢复到适当的范围。我发现使用简单的计算器尝试一些例子很容易,看看结果是否有意义。

var minDegree:int = 0
var maxDegree:int = 360

function randomDegree (minDegree:Number, maxDegree:Number):Number 
{
    return Math.min(maxDegree, Math.random() * (maxDegree - minDegree) + minDegree + .01);
}

trace(randomDegree(minDegree, maxDegree));