Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   100000 в 100 000 (http://www.flasher.ru/forum/showthread.php?t=165715)

fish_r 26.08.2011 17:39

Не понятно - что ваше выражение ищет? Попробуйте на практике.
ЗЫ. Если бы можно было одним я бы сделал одним выражением.

Код AS3:

function numSplitting(num:Number, str:String = " "):String {
                                //str- строка которой рубим число.
            var regE:RegExp =/(?<=(\d))(?=(\d{3})+(\.\d+)?$)/g
            var retStr:String = String(num).replace(regE, str);
            return retStr;
        }

Цитата:

Сообщение от alatar (Сообщение 1025721)

ага, пришёл - весь энтузиазм поломал! :D

ProxyGreen 26.08.2011 17:52

Цитата:

Сообщение от fish_r (Сообщение 1025741)
Не понятно - что ваше выражение ищет? Попробуйте на практике.
ЗЫ. Если бы можно было одним я бы сделал одним выражением.

Хе хе всё опробовано, выражение ищет не символы, а позиции, и их в последствии заменяет на 'str' :)

fish_r 26.08.2011 18:03

Цитата:

Сообщение от ProxyGreen (Сообщение 1025744)
Хе хе всё опробовано, выражение ищет не символы, а позиции, и их в последствии заменяет на 'str' :)

Гм.. и правда. Остроумно. Не уловил что замена, а не поиск. Извиняюсь :)

ProxyGreen 26.08.2011 18:26

Ну это не я придумал. Такая задачка была в:

"Регулярные выражения, 3-е изд. (Джеффри Фридл, 2008)"

Более подробной книжки по регам не видел.

fish_r 26.08.2011 21:38

А! Ну раз это мастер кунг-фу написал, то придраться можно: дело в том, что разделитель триад после точки либо не надо делать, либо делать в обратную сторону, т.е. справа-налево. Так что все равно неправильно :D

ProxyGreen 27.08.2011 19:20

Таки признаю что одним выражением тут не вывезешь:
Код AS3:

function numSplitting(num:Number, str:String = " "):String {
                        var sprlitReg:RegExp =/([^.]+)(\.\d+)?/;
                        var regE:RegExp =/(\d{1,3})(?=(?:\d{3})+$)/g;
                        var regRest:RegExp =/(\d{3})(?=\d)/g;
 
                        var retStr:String = String(num);
 
                        var main:String = retStr.replace(sprlitReg, "$1").replace(regE,"$1"+str);
                        var rest:String = retStr.replace(sprlitReg, "$2").replace(regRest, "$1" + str);
 
            retStr = main + rest;
                        return retStr;
                }

Теперь всё угрюмо и неинтересно, зато по правилам, но про такое деление дробной части честно говоря впервые слышу :D

Psycho Tiger 28.08.2011 23:54

Цитата:

Красиво элегантно, но как сказал один мудрый человек - от таких конструкций, которые потом придется вспоминать зачем здесь что и как оно работает , например именно /= , почему нет итератора, - нужно отказываться
Это слишком простой случай чтобы об этом говорить. Если с этим есть проблемы - можно оставить комментарий к методу.

in4core 29.08.2011 03:42

Цитата:

Это слишком простой случай чтобы об этом говорить. Если с этим есть проблемы - можно оставить комментарий к методу.
Это да вопросов нет, но все же лучше написать просто ( криво) и понятно, чем красиво, но сложно для понимания как тебе - через время, так и команде при рефракторинге*.

i.o. 29.08.2011 09:40

Код AS3:

private function addSpaces(input:Number):String
{
        var result:String = "";
        for (; input > 1; input /= 1000)
                result = int(input % 1000) + " " + result;
        return result;
}

Цитата:

но все же лучше написать просто ( криво) и понятно, чем красиво, но сложно для понимания
Что такого сложного Вы нашли в этих 4 строчках?

Hamid 29.08.2011 11:58

В книжке "сборник рецептов" есть про такое форматирование стр. 108-113, там нужна библиотека ascb(в книжке должна быть ссылка на нее)


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

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