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

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 для борьбы со спамом. Узнайте, как обрабатываются ваши данные комментариев.