Форум 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)

54321go 26.08.2011 02:03

100000 в 100 000
 
Как сделать, из числа 100000 строку 100 000, то есть с пробелом? Подскажите функцию

t4arty 26.08.2011 02:15

писать свою

Psycho Tiger 26.08.2011 02:29

Вариант вроде такого неправильный:
Код AS3:

var a:String=String(num);
var l:int=a.length / 3;
var b:String="";
for (var i:int=0; i<l; i++){
b+=b.substr(i*3,3)+" ";
}

Потому что парсит слева-направо. Надо наоборот.
Вариант 2:
Код AS3:

var a:int=num;
var str:String="";
var c:int=0;
while (a){
if (c++ === 3) str=" "+str;
str=String(a%10)+str;
a*=0.1;
}

Вот так мужественно, но расточительно с точки зрения ресурсов... Надо бы отцеплять по 3 разряда и делить разом на 1000, хех...
Вариант 3:
Код AS3:

var a:int=num;
var str:String="";
var c:int=0;
while (a){
if (a >= 1000) a=" "+a;
str=String(a%1000)+str;
a*=0.001;
}

Но как-то пробел добавит спереди, надо ещё хитрее.
Но меня беспокоит производительность. А вдруг число 100000000000000000?
Вот в ByteArray если писать циферки, не думая, а потом считать задом наперед, вот да...
P.S. пол 5 утра, код писался здесь и не тестился. Почти уверен, что нерабочий... Но Вы дерзайте, я вот в Вас верю.

ChuwY 26.08.2011 05:55

Как-то так. На производительность не проверял.
Код AS1/AS2:

function separateDigitStr(str : String, delimiter : String = ".", count : int = 3):String{
      // assert
      if(count < 1){
        throw new ArgumentError("Количество знаков между разделителями должно быть больше нуля.");
      }
      //
      var nSeparates : uint = Math.ceil(str.length/count)-1;
      var shift      : uint = str.length%count;
      var head      : String = "";
 
      if(nSeparates && shift){
        head = str.substr(0, shift) + delimiter
        str = str.substr(shift);
        nSeparates--;
      }
 
      for(var i : int = 0; i < nSeparates; i++){
        str = str.substr(0, count*(i+1) + i) + delimiter + str.substr(count*(i+1) + i)
      }
 
      return head + str;
}


etc 26.08.2011 09:34

http://www.flasher.ru/forum/showpost...70&postcount=5

з. Ы. Не учитывает плавающую запятую и знак.

wvxvw 26.08.2011 11:36

Код AS3:

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

Да, конечно, есть минусы - нужно делать отдельную проверку для дробных и отрицательных - но это уже, как говорится - тема для самостоятельных практических занятий :)

arkadattx 26.08.2011 11:39

А что такое input? Там переменная нигде не потерялась?

wvxvw 26.08.2011 11:41

input - аргумент функции. Простые типы передаются по значению, так что можно изменять / присваивать, если хочется.

arkadattx 26.08.2011 11:54

Ой, что-то аргумент не заметил.
Смущает конструкция
for (; input > 1; input /= 1000)

bav 26.08.2011 12:00

Код:

for (; input > 1; input /= 1000)
За ненадобностью опущено объявление итератора цикла. Точно также допустимо опускать и прочее, вот, например, бесконечный цикл:
Код:

for ( ; ; ) { ... }


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

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