Форматирование числа Javascript с запятой
Я пытаюсь форматировать числа, чтобы они имели запятую между каждыми 3 числами. Он очень глючный и не работает, когда он добирается до 8 чисел. Я поместил весь код в jsfiddle ниже:
function commaSeparateNumber(val){
val = val.replace(',', '');
var array = val.split('');
var index = -3;
while (array.length + index > 0) {
array.splice(index, 0, ',');
// Decrement by 4 since we just added another unit to the array.
index -= 4;
}
return array.join('');
};
$(document).on('keyup', '.test', function() {
var value = $(this).val();
value = commaSeparateNumber(value);
$(this).val(value);
});
http://jsfiddle.net/R8JrF/
Любая помощь приветствуется!
Ответы
Ответ 1
I импровизированный ответ в комментарии. Вам понадобится только код ниже. Проверьте это, а также скрипку:
$(document).on('keyup', '.test', function() {
var x = $(this).val();
$(this).val(x.toString().replace(/,/g, "").replace(/\B(?=(\d{3})+(?!\d))/g, ","));
});
Причина, по которой это не сработало, после внесения изменений необходимо удалить все запятые и снова форматировать, что не было сделано в коде OP, а также в другом ответе.
Ответ 2
Используйте Number.prototype.toLocaleString();
здесь >
var no = 3456;
no.toLocaleString();
Дает 3,456
Ответ 3
Ваша проблема в том, что когда вы добираетесь до восьмой цифры, промежуточный результат имеет в ней уже две запятые. Тем не менее,
val = val.replace(',', '');
заменяет только первый. Вам нужно будет предоставить регулярное выражение с global:
val = val.replace(/,/g, '');
Обновлено, рабочая скрипка