avmaksimov писал(а):Скажите, не пробовали ли вы через "чистую математику"?)
ну у меня как раз "чистая математика". Сделать выборку для всех символов, все разом перевести в значение, а потом сложить... Это может быть быстрее только для больших чисел, а в большинстве своём мы до миллиона не так часто доходим. Я далеко не уверен, что будет быстрее.
Я больше склоняюсь к тому, чтоб эту функцию можно было использовать в многопоточке, и не важно используется она уже где-то или нет. Но пока не занимался этим.
avmaksimov писал(а):Что быстрее ваш код или библиотечный IntToStr?
Проверил, мой быстрее. А тот, что на ассемблере, ещё быстрее, потому что там куча лишних действий убрано.
И, да
он быстрее этого кода.
(Человек делавший тот код, не захотел его оптимизировать в скорость. Почему? Я не знаю. Но за счёт его кода, я ускорил свой и понял как можно убрать лишние вычисления которые вносит компилятор FPC.
Ну и приходится быть зависимым от кодировки символов. Если кодировка страницы неправильно выставлена, то очень сильно может потеряться скорость.)
нет, это другой код, очень похожий.
avmaksimov писал(а):Я честно говоря, снова не понял, почему вы не поняли, если я уже другому человеку сказал, что тот неверно понял))))
потому что я прочитал тот пост позже. ))) А до этого думал про обычный перевод.
avmaksimov писал(а):Какая точка в дробной части?
Я про числа с плавающей точкой (хотя использовать можно для всех). Если число уже переведено в строку, то достаточно разделитель найти и воткнуть пробелы по местам.
avmaksimov писал(а):Ну как бы тут не студенты вроде собрались - все понимают, что для работы нужно работать с числом, а выводить для человека только результат.
лучше по себе не судить. Я очень часто встречаюсь, где люди хранят числа в текстовом варианте. Не все тут программисты и не все понимают, что это лишние действия. ))) Не в обиду им!
avmaksimov, давай глянем...
iskander писал(а):А что насчёт вот такого варианта?
выдёргиваем нужное из его кода:
- Код: Выделить всё
- const
 Decs: array[0..9] of Char = ('0','1','2','3','4','5','6','7','8','9');
и делаем заново:
- Код: Выделить всё
- const
 DecTable: array[0..9] of Char = ('0','1','2','3','4','5','6','7','8','9');
 
 function IntToStrNew(Value: Int64): string;
 var
 _Res: array[0..26] of Char;
 i, j, n: int64;
 minus: boolean = false;
 label
 GoEnd;
 begin
 if Value = 0 then
 begin
 Result := '0';
 exit;
 end;
 Result := '';
 n := 0;
 j := 0;
 if Value < 0 then
 begin
 minus := true;
 Value := abs(Value + 1);
 end;
 // тут надо сделать шаг, если значение было минусовое
 if minus then
 begin
 i := Value mod 10 + 1;
 Value := Value div 10;
 if i > 9 then
 begin
 inc(Value);
 _Res[j] := '0';
 end
 else
 _Res[j] := DecTable[i];
 inc(j);
 inc(n);
 if Value = 0 then
 goto GoEnd;
 end;
 while Value > 9 do
 begin
 i := Value mod 10;
 Value := Value div 10;
 _Res[j] := DecTable[i];
 inc(j);
 inc(n);
 if n = 3 then
 begin
 _Res[j] := ' ';
 inc(j);
 n := 0;
 end;
 end;
 _Res[j] := DecTable[Value];
 GoEnd:
 if minus then
 Result := Result + '-';
 While j >= 0 do
 begin
 Result := Result + _Res[j];
 dec(j);
 end;
 end;
выставляю лицензию 
ZLib на код. )))
проверяйте. )))
Добавлено спустя 8 минут 32 секунды:Re: Конвертация Int64 с разделителем групп разрядов: неужели?!)походу бесполезный код... я его почти с первого раза и практически без ошибок написал...
Добавлено спустя 2 минуты 39 секунд:Re: Конвертация Int64 с разделителем групп разрядов: неужели?!)Ну и, возможно быстрее было бы сразу в строку копировать данные. Надо это или нет?