Добавьте разделитель тысяч в число с Javascript или jQuery?

У меня есть функция, которая суммирует столбец данных в таблице html. Он делает это превосходно, только я хотел бы, чтобы он поставил там запятые, которые необходимы для разделения тысяч. Вначале вы заметите, что в добавленных числах есть запятые. Чтобы функция добавила их, они удаляются. Как добавить туда запятые?

 function sumOfColumns(tableID, columnIndex, hasHeader) { var tot = 0; $("#" + tableID + " tr" + (hasHeader ? ":gt(0)" : "")) .children("td:nth-child(" + columnIndex + ")") .each(function() { tot += parseInt($(this).html().replace(',', '')); }); return "Total Pounds Entered : " + tot; }  

$(this).html().replace(',', '') не должен фактически изменять страницу. Вы уверены, что запятые удаляются на странице?

Если это так, эта функция addCommas должна сделать трюк.

 function addCommas(nStr) { nStr += ''; var x = nStr.split('.'); var x1 = x[0]; var x2 = x.length > 1 ? '.' + x[1] : ''; var rgx = /(\d+)(\d{3})/; while (rgx.test(x1)) { x1 = x1.replace(rgx, '$1' + ',' + '$2'); } return x1 + x2; } 

Это добавит тысячи разделителей, сохранив десятичную часть заданного числа:

 function format(n, sep, decimals) { sep = sep || "."; // Default to period as decimal separator decimals = decimals || 2; // Default to 2 decimals return n.toLocaleString().split(sep)[0] + sep + n.toFixed(decimals).split(sep)[1]; } format(4567354.677623); // 4,567,354.68 

Вы также можете исследовать десятичный разделитель языка:

 var sep = (0).toFixed(1)[1]; 

Использовать toLocaleString()
В вашем случае выполните:

 return "Total Pounds Entered : " + tot.toLocaleString(); 

Вот как я это делаю:

 // 2056776401.50 = 2,056,776,401.50 function humanizeNumber(n) { n = n.toString() while (true) { var n2 = n.replace(/(\d)(\d{3})($|,|\.)/g, '$1,$2$3') if (n == n2) break n = n2 } return n } 

Или, в CoffeeScript:

 # 2056776401.50 = 2,056,776,401.50 humanizeNumber = (n) -> n = n.toString() while true n2 = n.replace /(\d)(\d{3})($|,|\.)/g, '$1,$2$3' if n == n2 then break else n = n2 n 

Учти это:

 function group1k(s) { return (""+s) .replace(/(\d+)(\d{3})(\d{3})$/ ,"$1 $2 $3" ) .replace(/(\d+)(\d{3})$/ ,"$1 $2" ) .replace(/(\d+)(\d{3})(\d{3})\./ ,"$1 $2 $3.") .replace(/(\d+)(\d{3})\./ ,"$1 $2." ) ; } 

Это быстрое решение для чего-либо менее 999.999.999, чего обычно достаточно. Я знаю недостатки, и я не говорю, что это самое главное оружие, но оно так же быстро, как и другие, и я считаю это еще более удобочитаемым. Если вам не нужны десятичные знаки, вы можете упростить его еще больше:

 function group1k(s) { return (""+s) .replace(/(\d+)(\d{3})(\d{3})$/ ,"$1 $2 $3") .replace(/(\d+)(\d{3})$/ ,"$1 $2" ) ; } 

Разве это не удобно.

Я знаю, что это старый пост и имеет хорошие ответы, но если кому-то интересно, есть плагин jQuery, который упрощает форматирование чисел (форматирование тысяч, количество десятичных знаков, настраиваемый разделитель тысяч и т. Д.), Делая включение и простой вызов. Достаточно большого количества функций и документации. Он называется jQuery Number .

Вы просто включите его:

  

И затем используйте его:

На автоматическом форматировании HTML-ввода: $('input.number').number( true, 2 );

или

По вызову JS: $.number( 5020.2364, 2 ); // Outputs: 5,020.24 $.number( 5020.2364, 2 ); // Outputs: 5,020.24

Надеюсь, это помогает кому-то.

Я получил где-то со следующим методом:

 var value = 123456789.9876543 // ie some decimal number var num2 = value.toString().split('.'); var thousands = num2[0].split('').reverse().join('').match(/.{1,3}/g).join(','); var decimals = (num2[1]) ? '.'+num2[1] : ''; var answer = thousands.split('').reverse().join('')+decimals; 

Использование split-reverse-join – это скрытый способ работы с обратной стороны строки на передней панели, в группах по 3. Может быть, есть более простой способ сделать это, но он чувствовал себя интуитивно понятным.

рекурсивное решение:

 function thousands(amount) { if( /\d{3}\d+/.test(amount) ) { return thousands(amount.replace(/(\d{3}?)(,|$)/, ',$&')); } return amount; } 

другое разделенное решение:

 function thousands (amount) { return amount.split('').reverse().join('').replace(/\d{3}/g, '$&,').split('').reverse().join(''); } 

Ниже приведен рабочий пример:

  $("#estimated-amount-due .content").html("$" + miniCartTotal.toFixed(2).replace(/(\d)(?=(\d{3})+(?!\d))/g, "$1,")); 

Эта линия достаточна, она работает для меня. Проверьте полный код ниже. Дайте мне знать, хорошо ли это для вас тоже.

 $(".action.showcart").on('click', function() { var miniCartTotal = $("#estimated-subtotal .price").html(); var miniCartTotalString = miniCartTotal.replace(/\$/g, ''); var miniCartTotalString = miniCartTotalString.replace(/,/g, ''); var configValue = 5; miniCartTotal = parseFloat(miniCartTotalString) + configValue; console.log("updated value " + miniCartTotal); $("#estimated-amount-due .content").html("$" + miniCartTotal.toFixed(2).replace(/(\d)(?=(\d{3})+(?!\d))/g, "$1,")); }); 

лучший и простой способ форматирования номера – использовать функцию java-script

 var numberToformat = 1000000000 //add locality here, eg: if you need English currency add 'en' and if you need Danish currency format then use 'da-DA'. var locality = 'en-EN'; numberToformat = numberToformat.toLocaleString(locality , { minimumFractionDigits: 4 }) document.write(numberToformat); 

для получения дополнительной информации щелкните страницу документации

  • Изменение типа ввода jQuery
  • Как получить событие click ONLY только для родительского DIV, а не для детей?
  • ASP.NET MVC частичное представление части с jQuery ajax
  • Не удалось загрузить Google в iframe в fancybox
  • JavaScript console.log вызывает ошибку: «Синхронный XMLHttpRequest в основном streamе устарел ...»
  • Получите значение выпадающего списка в jQuery
  • Как сделать элемент «flash» в jQuery
  • выбрать событие выбора jquery select
  • Функция триггера jquery, когда элемент находится в viewport
  • Как установить кеш: false в вызове jQuery.get
  • Каков самый простой способ заказать / в jQuery?
  • Давайте будем гением компьютера.