Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   Округление числа с двумя запятыми (http://www.flasher.ru/forum/showthread.php?t=173802)

GBee 12.01.2012 19:42

Цитата:

В данном случае пост №4 считаю лучшим решением
Ну вот я уже сомневаюсь, надо тесты проводить.

3 сабстринга и 4 конкатенации против одного реплейса и одной конкатенации.

Добавлено через 10 минут
Код AS3:

package
{
        import flash.display.Sprite;
 
        public class Test extends Sprite
        {
                public function Test():void
                {
                        var i:int = 0;
                        var t:Number;
                    var len:int = 1000000;
 
                        t = new Date().getTime();
                        for(i = 0; i<len; i++)
                                parse1(i);
                        trace("parse1", new Date().getTime() - t);
 
                        t = new Date().getTime();
                        for(i = 0; i<len; i++)
                                parse2(i);
                        trace("parse2", new Date().getTime() - t);
                }
 
 
                private function parse1(num:int):String
                {
                        var st:String = "000000" + num;
                        return st.replace(/(\d*)(\d{2})(\d{3})(\d{2})/, "$2.$3.$4");
                }
 
                private function parse2(num:int):String
                {
                        var st:String = "000000" + num;
                        return st.substr(-7, 2) + "." + st.substr(-5, 3) + "." + st.substr(-2, 2);
                }
        }
}

parse1 9157
parse2 2788

Абсолютно чистая победа за №4. :о))

i.o. 12.01.2012 22:09

Цитата:

parse1 9157
parse2 2788
Ну тесты в дебажном плеере мало о чем говорят... :D

GBee 12.01.2012 22:20

Вот Фома-то :о)). В релизе:

parse1: 6369
parse2: 1313

Безупречно чистая победа.

etc 12.01.2012 22:42

Регэкспы по умолчанию тормознее, не знаю, зачем тесты ещё проводить.

GBee 12.01.2012 23:10

Я много чего еще не знаю. Кто, например, задал эти умолчания, или это как-то эмпирически вычисляется?

etc 12.01.2012 23:13

Страшная тайна: RegExp написан на AS3.

GBee 12.01.2012 23:22

Грусть Печаль

etc 12.01.2012 23:24

Да, поэтому предпочтение отдаётся ломовым методам, чаще всего.

i.o. 12.01.2012 23:41

Цитата:

Страшная тайна: RegExp написан на AS3.
O_O
Пруф в студию.

wvxvw 13.01.2012 02:36

Код AS3:

private static const _pattern:ByteArray = new ByteArray();
 
private static const _separator:int = 0x2E;
 
private static const _asciiZero:int = 0x30;
 
private static function format(digit:uint):String
{
        var reminder:uint;
 
        _pattern.clear();
        _pattern.length = 13;
        _pattern[0] = 12;
        while (_pattern[0])
        {
                reminder = digit;
                digit /= 10;
                reminder  -= digit * 10;
                if (((_pattern[0] + 1) & 2) == 2)
                        _pattern[_pattern[0]--] = _separator;
                _pattern[_pattern[0]--] = _asciiZero + reminder;
        }
        _pattern[0] = _asciiZero + digit;
        return _pattern.toString();
}

Просто от нечего делать :)


Часовой пояс GMT +4, время: 02:51.

Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.