Форматирование числа Javascript с запятой - программирование
Подтвердить что ты не робот

Форматирование числа 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/

Любая помощь приветствуется!

4b9b3361

Ответ 1

I импровизированный ответ в комментарии. Вам понадобится только код ниже. Проверьте это, а также скрипку:

$(document).on('keyup', '.test', function() {
    var x = $(this).val();
    $(this).val(x.toString().replace(/,/g, "").replace(/\B(?=(\d{3})+(?!\d))/g, ","));
});

Fiddle: http://jsfiddle.net/praveenscience/R8JrF/1/

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

Ответ 2

Используйте Number.prototype.toLocaleString(); здесь >

var no = 3456;
no.toLocaleString(); 

Дает 3,456

Ответ 3

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

val = val.replace(',', '');

заменяет только первый. Вам нужно будет предоставить регулярное выражение с global:

val = val.replace(/,/g, '');

Обновлено, рабочая скрипка