Как реализовать форматирование чисел с помощью JS?

Здравствуйте. Подскажите мне скрипт для форматирование числа (отображения по разрядам) на js.

У меня есть примерно такой код:

<span id="bla">$old_code</span>

Необходимо взять число (отдается переменной) из элемента с id "bla", и отдать уже форматированное (например: 10 545). Нужен вариант на JS и работай с id.

Спасибо за внимание
  • Вопрос задан
  • 15029 просмотров
Пригласить эксперта
Ответы на вопрос 5
iiil
@iiil
Инженер и вэб-дизайнер, рисую.
Так напишите сами, вроде простой получается код. Логика примерно такая:
берем значение элемента с нужным id, если есть запятая или точка - то считая от нее, если нет - то от последней цифры, отсчитываем по три знака и ставим пробелы.
Ответ написан
Комментировать
rassel101
@rassel101
back-end разработчик
function formatStr(str) {
    str = str.replace(/(\.(.*))/g, '');
    var arr = str.split('');
    var str_temp = '';
    if (str.length > 3) {
        for (var i = arr.length - 1, j = 1; i >= 0; i--, j++) {
            str_temp = arr[i] + str_temp;
            if (j % 3 == 0) {
                str_temp = ' ' + str_temp;
            }
        }
        return str_temp;
    } else {
        return str;
    }
}


Пример: jsfiddle.net/XbqZJ
Ответ написан
Комментировать
akashtrih
@akashtrih
Нативно в языке ничего не предусмотрено для форматирования чисел. Напиши свою функцию или используй, например, какой-нибудь jQuery-плагин. В качестве информации для размышления: stackoverflow.com/questions/1068284/format-numbers...
Ответ написан
Комментировать
читай о .toLocaleString()
Ответ написан
Комментировать
@Szen
Универсальный вариант, где можно указать необходимые параметры (разряды, символ разрядов, десятичные, символ десятичных, заполнитель десятичных, если в результате десятичных меньше, чем задано в параметре). Встроил в прототип объекта String, поэтому работает только со строками. При желании можно выделить в отдельную функцию.
String.prototype.format = function(params) {
	params = params || {};
	params = {
		digitsCount: params.digitsCount || 3,
		digitsSeparator: params.digitsSeparator || ' ',
		decimalCount: params.decimalCount || 0,
		decimalSeparator: params.decimalSeparator || '.',
		decimalReplacer: params.decimalReplacer || '0',
	};
	var str = this.replace(/\s+/g, '');
	if (!str) str = '0';
	int = str.replace(/\.\d+/, '');
	re = new RegExp('\\B(?=(\\d{' + params.digitsCount + '})+(?!\\d))','g');
	int = int.replace(re, params.digitsSeparator);
	output = int;
	if (params.decimalCount) {
		dec = str.replace(/\d+\./, '');
		dec = dec.substr(0, params.decimalCount);
		if (dec.length < params.decimalCount) dec = dec + params.decimalReplacer.repeat(params.decimalCount - dec.length);
		output = output + params.decimalSeparator + dec;
	}
	return output;
};


Используем так:
var num = '123456789';
var formatted = num.format({
	digitsCount: 3,
	decimalCount: 2
});
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы