formatnum - форматирование цифр
Описание:
Преобразует число в строку с разделителями.
Параметры:
dest[] - массив/строковая переменная, в которую будет записан результат
number - число
const delimiter = ' ' - разделитель
bool:packed = false - вид возвращаемой строки (true - упакованная, false - обычная строка)
size = sizeof dest - размер массива dest (не рекомендую изменять)
Возвращаемое значение:
Возвращает количество цифр в числе.
Плюсы реализации:
- В отличие от функции format умеет работать с упакованными строками.
- Быстрое вычисление из-за инструкций sdiv/udiv.
Минусы реализации:
Код:
PHP код:
stock
formatnum(dest[], number, const delimiter = ' ', bool:packed = false,
size = sizeof dest)
{
dest[0] = '0';
new i;
if (number) {
new
tnum = number,
part_size,
mod,
end;
// Умножаем размер на 4, ибо sizeof возвращает количество ячеек.
if (packed)
size <<= 2;
// Подсчитываем количество цифр.
do {
tnum /= 10;
++i;
} while (tnum);
end = i;
// Проверяем, является ли число большее 999, и стоит ли ему добавлять
// в размер количество разделителей.
if (number > 999) {
end += (end % 3) + 2;
}
while (number) {
if (part_size < 3) {
++part_size;
} else {
part_size = 0;
if (packed) {
dest{--end} = delimiter;
} else {
dest[--end] = delimiter;
}
continue;
}
// Пустой блок для фикса ошибки.
{}
#emit load.s.pri number
#emit const.alt 10
// Если вы хотите работать с беззнаковыми числами, то используйте
// инструкцию udiv.
#emit sdiv
#emit stor.s.pri number
#emit stor.s.alt mod
if (--end < size) {
if (packed) {
dest{end} = '0' + mod;
} else {
dest[end] = '0' + mod;
}
}
}
}
return i;
}
Пример использования:
PHP код:
main()
{
new buffer[12];
new r = formatnum(buffer, 2, '.');
printf("%d", r);
printf("%s", buffer);
}
См. также:
Автор: VVWVV
Исключительно для pro-pawn.ru
Копирование данной статьи на других ресурсах без разрешения автора запрещено.