ただし、戻り値が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 作成。