Добавление десятичных разделителей

string_thousands

Нередко, игры и программы могут отображать числа. Порой, большие числа. В некоторых случаях, числа с таким количеством цифр, что зритель даже не уверен о названии единиц числа.

И это - самое время добавить разделители в числа. Поскольку разделяющие символы (обычно, запятые) появляются в меньшем количестве, чем сами цифры, их легче считать, и сравнение чисел становится более однозначной задачей.

Эта запись посвящена данной операции, включая алгоритм и код.

Стоит заметить, что мысль о написании данной записи пришла ко мне после выдачи кому-то ссылку на сделанную Andrew McCluskey функцию string_thousands для GameMaker.
Код адекватен, и производительность не имеет великой важности, но волнующий меня вопрос был в том, является ли это простейшей из возможных реализаций.

Так что, вначале поговорим о подходе.


Самый простой из возможных подходов так же является самым очевидным - нужно добавить запятую между каждой тройкой чисел, начиная с конца. Буквально? Буквально:

string_thousands

Псевдокод данного действа будет выглядеть где-то так:

Тут, `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;
}

И, конечно, что сделает запись хорошей, если не маленькая интерактивная демонстрация:

Увы! В вашем браузере нет поддержки HTML5.

(с помощью слайдера можно регулировать значение)

Надеюсь, это было достаточно круто.

Похожие записи

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Этот сайт использует Akismet для борьбы со спамом. Узнайте, как обрабатываются ваши данные комментариев.