Функция добавления запятых через каждые три цифры (разделитель тысяч) также удаляет точки из десятичных знаков

0

У меня есть форма, которая довольно большая и построена с использованием информации из базы данных.

Для всех полей, классифицированных как "числовые", функция вызывает ключ, чтобы автоматически добавлять тысячи разделителей. Это работает хорошо

function commas(n){
        n = n.replace(/,/g, '');
        var s=n.split('.')[1];
        (s) ? s='.'+s : s='';
        n=n.split('.')[0]
        while(n.length>3){
            s=','+n.substr(n.length-3,3)+s;
            n=n.substr(0,n.length-3)
        }
        return n+s
    }

Однако я заметил, что если я хочу поместить небольшое десятичное значение в поле, которое вызывает это на клавише, оно удаляет период

2.3 => 23

Я не вижу, как это происходит: я написал эту функцию запятой с помощью кого-то из Stack.

Может ли кто-нибудь посоветовать? благодаря

Редактировать:

jsfiddle этого явления, я не собираюсь это делать;)

  • 0
    Извините, но, насколько я вижу, этот код должен делать то, что вы хотите, и мне не удается воспроизвести ошибку. jsfiddle.net/bX92V Возможно, есть что-то еще, что является причиной вашей проблемы?
  • 0
    Пожалуйста, укажите jsfiddle, где возникает эта проблема. Я тоже не могу воспроизвести это.
Показать ещё 4 комментария
Теги:

1 ответ

2
Лучший ответ

Проблема в том, что как только вы входите в ".", Код видит, что после него ничего нет и установите s = ''. Эффект заключается в том, что каждый раз, когда вы входите '.', Он снова удаляется.

Попробуйте что-то вроде этого:

function commas(n) {
    n = n.replace(/,/g, '');
    var s = n.split('.')[1];
    (s)
        ? s = '.' + s
        : n.indexOf('.') >= 0
            ? s = '.'
            : s = '';
    n = n.split('.')[0];
    while (n.length > 3) {
        s = ',' + n.substr(n.length - 3, 3) + s;
        n = n.substr(0, n.length - 3);
    }
    return n + s;
}
  • 0
    Не уверен, почему это понизили? Проблема была воспроизведена ( jsfiddle.net/HkcPw ) и выше устраняет ее.
  • 0
    Спасибо за ваше время и усилия! Я действительно не голосовал против вас, возможно, кто-то просто не верил, что вы воспроизвели это. Кажется очень странным, что способ, которым вышеупомянутый комментатор вызвал функцию, однако не вызывает проблемы? Я брошу тебе голос, чтобы отменить
Показать ещё 4 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню