⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 numberutilities.as

📁 actionscript3 cookbook 源代码S3CBLibrary
💻 AS
字号:
package ascb.util {

  public class NumberUtilities {

	private static var _aUniqueIDs:Array;

    /**
     *  Round a number. By default the number is rounded to the nearest
     *  integer. Specifying a roundToInterval parameter allows you to round
     *  to the nearest of a specified interval.
     *  @param  number             The number you want to round.
     *  @param  nRoundToInterval   (optional) The interval to which you want to
     *                             round the number. The default is 1.
     *  @return                    The number rounded to the nearest interval.
     */
    public static function round(nNumber:Number, nRoundToInterval:Number = 1):Number {
      // Return the result
      return Math.round(nNumber / nRoundToInterval) * nRoundToInterval;
    }
    

    /**
     *  Get the floor part of a number. By default the integer part of the
     *  number is returned just as if calling Math.floor( ). However, by specifying
     *  a roundToInterval, you can get non-integer floor parts.
     *  to the nearest of a specified interval.
     *  @param  number             The number for which you want the floor part.
     *  @param  nRoundToInterval   (optional) The interval to which you want to
     *                             get the floor part of the number. The default is 1.
     *  @return                    The floor part of the number.
     */
    public static function floor(nNumber:Number, nRoundToInterval:Number = 1):Number {
    
      // Return the result
      return Math.floor(nNumber / nRoundToInterval) * nRoundToInterval;
    }

    /**
     *  Get the ceiling part of a number. By default the next highested integer
     *  number is returned just as if calling Math.ceil( ). However, by specifying
     *  a roundToInterval, you can get non-integer ceiling parts.
     *  to the nearest of a specified interval.
     *  @param  number             The number for which you want the ceiling part.
     *  @param  nRoundToInterval   (optional) The interval to which you want to
     *                             get the ceiling part of the number. The default is 1.
     *  @return                    The ceiling part of the number.
     */
    public static function ceil(nNumber:Number, nRoundToInterval:Number = 1):Number {

      // Return the result
      return Math.ceil(nNumber / nRoundToInterval) * nRoundToInterval;
    }

    /**
     *  Generate a random number within a specified range. By default the value
     *  is rounded to the nearest integer. You can specify an interval to which
     *  to round the value.
     *  @param  minimum            The minimum value in the range.
     *  @param  maximum            (optional) The maxium value in the range. If
                                   omitted, the minimum value is used as the maximum,
                                   and 0 is used as the minimum.
     *  @param  roundToInterval    (optional) The interval to which to round.
     *  @return                    The random number.
     */
    public static function random(nMinimum:Number, nMaximum:Number = 0, nRoundToInterval:Number = 1):Number {

      // If the minimum is greater than the maximum, switch the two.
      if(nMinimum > nMaximum) {
        var nTemp:Number = nMinimum;
        nMinimum = nMaximum;
        nMaximum = nTemp;
      }

        // Calculate the range by subtracting the minimum from the maximum. Add
        // 1 times the round to interval to ensure even distribution.
        var nDeltaRange:Number = (nMaximum - nMinimum) + (1 * nRoundToInterval);

        // Multiply the range by Math.random(). This generates a random number
        // basically in the range, but it won't be offset properly, nor will it
        // necessarily be rounded to the correct number of places yet.
        var nRandomNumber:Number = Math.random() * nDeltaRange;

        // Add the minimum to the random offset to generate a random number in the correct range.
        nRandomNumber += nMinimum;

        // Return the random value. Use the custom floor( ) method to ensure the
        // result is rounded to the proper number of decimal places.
        return floor(nRandomNumber, nRoundToInterval);
      }

    /**
     *  Generate a unique number.
     *  @return                    The unique number
     */
    public static function getUnique():Number {

      if(_aUniqueIDs == null) {
      	_aUniqueIDs = new Array();
      }

      // Create a number based on the current date and time. This will be unique
      // in most cases.
      var dCurrent:Date = new Date();
      var nID:Number = dCurrent.getTime();

      // It is possible that the value may not be unique if it was generated
      // within the same millisecond as a previous number. Therefore, check to
      // make sure. If it is not unique, then generate a random value and concatenate
      // it with the previous one.
      while(!isUnique(nID)) {
        nID += NumberUtilities.random(dCurrent.getTime(), 2 * dCurrent.getTime());
      }
      
      _aUniqueIDs.push(nID);

      // Return the number.
      return nID;  
    }

  /**
   *  Check to see if a number is unique within the array of stored numbers.
   *  @param  number            The number to compare.
   *  @return                   True or false
   */
  private static function isUnique(nNumber:Number):Boolean {
    for(var i:Number = 0; i < _aUniqueIDs.length; i++) {
      if(_aUniqueIDs[i] == nNumber) {
        return false;
      }
    }
    return true;
  }

  }
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -