ProblemYou want to use ActionScript to generate a random number. SolutionUse Math.random( ) to generate a random number between 0 and .999999. Optionally, use the NumberUtilities.random( ) method to generate a random number within a specific range. DiscussionYou can use the Math.random( ) method to generate a random floating-point number from 0 to 0.999999999. In most cases, however, programs call for a random integer, not a random floating-point number. Furthermore, you may want a random value within a specific range. If you do want a random floating-point number, you'll need to specify its precision (the number of decimal places). The simplest way to generate random numbers within a range and to a specified precision is to use the custom NumberUtilities.random( ) method. This method accepts up to three parameters, described as follows:
The following example illustrates some uses of the round( ) method: // Generate a random integer from 0 to 100. trace(NumberUtilities.random(0, 100)); // Generate a random multiple of 5 from 0 to 100. trace(NumberUtilities.random(0, 100, 5)); // Generate a random number from -10 to 10, rounded to the // nearest tenth. trace(NumberUtilities.random(-10, 10, .1)); // Generate a random number from -1 to 1, rounded to the // nearest five-hundredth. trace(NumberUtilities.random(-1, 1, .05)); To test that the random numbers generated by the NumberUtilities.random( ) method are evenly distributed, you can use a script such as the following: package { import flash.display.Sprite; import ascb.util.NumberUtilities; import flash.utils.Timer; import flash.events.TimerEvent; public class RandomNumberTest extends Sprite { private var _total:uint; private var _numbers:Object public function RandomNumberTest( ) { var timer:Timer = new Timer(10); timer.addEventListener(TimerEvent.TIMER, randomizer); timer.start( ); _total = 0; _numbers = new Object( ); } private function randomizer(event:TimerEvent):void { var randomNumber:Number = NumberUtilities.random(1, 10, 1); _total++; if(_numbers[randomNumber] == undefined) { _numbers[randomNumber] = 0; } _numbers[randomNumber]++; trace("random number: " + randomNumber); var item:String; for(item in _numbers) { trace("\t" + item + ": " + Math.round(100 * _numbers[item]/_total)); } } } } See AlsoRecipes 4.3 and 4.11 |