Нередко, игры и программы могут отображать числа. Порой, большие числа. В некоторых случаях, числа с таким количеством цифр, что зритель даже не уверен о названии единиц числа.
И это - самое время добавить разделители в числа. Поскольку разделяющие символы (обычно, запятые) появляются в меньшем количестве, чем сами цифры, их легче считать, и сравнение чисел становится более однозначной задачей.
Эта запись посвящена данной операции, включая алгоритм и код.
Стоит заметить, что мысль о написании данной записи пришла ко мне после выдачи кому-то ссылку на сделанную Andrew McCluskey функцию string_thousands для GameMaker.
Код адекватен, и производительность не имеет великой важности, но волнующий меня вопрос был в том, является ли это простейшей из возможных реализаций.
Так что, вначале поговорим о подходе.
Самый простой из возможных подходов так же является самым очевидным - нужно добавить запятую между каждой тройкой чисел, начиная с конца. Буквально? Буквально:
Псевдокод данного действа будет выглядеть где-то так:
Тут, `string` - входная строка с нумерацией символов начиная с 0. i = (длина строки string) - 3 пока i > 0: вставить "," в string на позиции (i) i = i - 3 вернуть string
Непосредственный код сравнительно прост. К примеру, в GameMaker, нумерация символов в строках начинается с 1, но есть встроенная функция string_insert для вставки под-строк:
/// string_thousands(integer) var r, i; r = string(argument0) for (i = string_length(r) - 2; i > 1; i -= 3) { r = string_insert(",", r, i) } return r
С другой стороны, в JavaScript (как и большинстве других языков программирования), встроенного метода для вставки нет, но реализация остается довольно простой:
function string_thousands(v) { var r, i; r = "" + v; for (i = r.length - 3; i > 0; i -= 3) { r = r.substr(0, i) + "," + r.substr(i); } return r; }
И, конечно, что сделает запись хорошей, если не маленькая интерактивная демонстрация:
(с помощью слайдера можно регулировать значение)
Надеюсь, это было достаточно круто.