Зачем вам такие числа? Если вы хотите хранить числа в диапазоне [0, 4294967296), то можно использовать библиотеку ulong. Тем не менее я не вижу абсолютно никакого смысла использовать в SA:MP значения больше имеющихся.
Зачем вам такие числа? Если вы хотите хранить числа в диапазоне [0, 4294967296), то можно использовать библиотеку ulong. Тем не менее я не вижу абсолютно никакого смысла использовать в SA:MP значения больше имеющихся.
Немного поздно, но всё же: функция неправильно выводит cellmin, вместо "-2147483648" выводится "---" (причина кроется в баге в функции format()). Решение из formatnumber.inc тоже фейлит на cellmin.
Поделюсь своим костылём:
stock NumToString(dest[], num, sep = '\'', size = sizeof(dest)) { // by Daniel_Cortez \\ pro-pawn.ru if (num == cellmin) { return 14; } static neg, len, offs; new numstr[11]; if ((neg = (num < 0))) { dest[0] = '-'; size--; num = -num; } switch (len) { case 1..3: case 4..6: case 7..9: return format(dest[neg], size, "%.*s%c%.3s%c%.3s", offs, numstr, sep, numstr[offs], sep, numstr[3+offs]), (len + neg + 2); } format(dest[neg], size, "%.*s%c%.3s%c%.3s%c%.3s", offs, numstr, sep, numstr[offs], sep, numstr[3+offs], sep, numstr[6+offs]); return len + neg + 3; }
Из плюсов данного варианта: отсутствие возврата массива через стек (вместо этого пользователь сам должен указать массив для записи), правильный вывод cellmin, функция возвращает длину строки с числом.
Индивидуально в ЛС по скриптингу не помогаю. Задавайте все свои вопросы здесь (click).
Стол заказов:
Мои работы:
Еще можно так это сделать.
stock ulong_string(dest[], ulong:value, bool:is_packed = false, delimiter, size = sizeof dest) { dest[0] = '0'; if (value) { if (is_packed) size <<= 2; new end = ulong_getDigitCount(value), mod = 0, part_size = 0, out_chr = 0; while (value) { // dest[end] = '0' + (value % 10) #emit load.s.pri value #emit const.alt 10 #emit udiv #emit stor.s.pri value #emit stor.s.alt mod if (++part_size == 4) { part_size = 0; out_chr = delimiter; } else if (--end < size) { out_chr = '0' + mod; } if (is_packed) { dest{end} = out_chr; } else { dest[end] = out_chr; } } } return 0; }
Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)