ただし、戻り値がint型になる。
/** * 値をまるめる * * @param value - 値 * @return 丸めた値 */ function round(value:Number):int { return int(WIDTH + .5); }
一応比較結果とソース。
/** * Math.round()の実行速度テスト * */ const WIDTH:Number = 99.49; //四捨五入に使う値 const NUM_LOOP:int = 1000000; //繰り返し回数 var startTime:Number; var i:int; var value:Number; //実行速度テスト startTime = getTimer(); for(i = 0; i < NUM_LOOP; i++) { //floor1(WIDTH / 2); value = WIDTH / 2; Math.round(value); } //計算時間を出力 var result1:TextField = new TextField(); result1.text = "Math.round(変数) ---> " + (getTimer() - startTime) + "ms"; result1.autoSize = TextFieldAutoSize.LEFT; addChild(result1); startTime = getTimer(); for(i = 0; i < NUM_LOOP; i++) { Math.round(WIDTH / 2); } //計算時間を出力 var result2:TextField = new TextField(); result2.text = "Math.round(計算式) ---> " + (getTimer() - startTime) + "ms"; result2.y = 25; result2.autoSize = TextFieldAutoSize.LEFT; addChild(result2); startTime = getTimer(); for(i = 0; i < NUM_LOOP; i++) { var rest:Number = value % 1; var result:Number = (rest < .5) ? value - rest : value + (1 - rest); } //計算時間を出力 var result3:TextField = new TextField(); result3.text = "(rest < .5) ? value - rest : value + (1 - rest) ---> " + (getTimer() - startTime) + "ms"; result3.y = 50; result3.autoSize = TextFieldAutoSize.LEFT; addChild(result3); startTime = getTimer(); for(i = 0; i < NUM_LOOP; i++) { var hoge:int = int(WIDTH + .5); } //計算時間を出力 var result4:TextField = new TextField(); result4.text = "int(WIDTH + .5) ---> " + (getTimer() - startTime) + "ms"; result4.y = 75; result4.autoSize = TextFieldAutoSize.LEFT; addChild(result4);
- update: 2012/2/27 更新。さらに速い計算式を追加。
- update: 2010/10/7 作成。