Javascript тысячный разделитель / строковый формат
есть ли функция в Javascript для форматирования числа и строк ?
Я ищу способ для разделитель для строк или чисел... (Как Струна.Формат в c#)
12 ответов:
обновление (7 лет спустя)
ссылка, приведенная в исходном ответе ниже, была неправильной. Там и встроенная функция для этого, а именно Кайзер предполагает ниже:
toLocaleString
так что вы можете сделать:
(1234567.89).toLocaleString('en') // for numeric input parseFloat("1234567.89").toLocaleString('en') // for string input
функция, реализованная ниже, тоже работает, но просто не нужна.
(Я думал, что, возможно, мне повезет и я узнаю, что это был необходимо вернуться в 2010, но нет. Согласно этому более надежная ссылка, toLocaleString был частью стандарта с ECMAScript 3rd Edition [1999], что, по моему мнению, означает, что он был бы поддержан еще в IE 5.5.)
Оригинальный Ответ
по данным этой ссылке нет встроенной функции для добавления запятых в число. Но эта страница содержит пример кода вы сами:
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, '' + ',' + ''); } return x1 + x2; }
Edit: Чтобы пойти другим путем (преобразовать строку с запятыми в число), вы можете сделать что-то вроде этого:
parseFloat("1,234,567.89".replace(/,/g,''))
если о локализация тысячи разделителей, разделителей и десятичных разделителей, идут со следующим:
// --> numObj.toLocaleString( [locales [, options] ] ) parseInt( number ).toLocaleString();
есть несколько вариантов, которые вы можете использовать (и даже локали с резервными вариантами):
number = 123456.7089; result = parseInt( number ).toLocaleString() + "<br>"; result += number.toLocaleString( 'de-DE' ) + "<br>"; result += number.toLocaleString( 'ar-EG' ) + "<br>"; result += number.toLocaleString( 'ja-JP', { style : 'currency', currency : 'JPY', currencyDisplay : 'symbol', useGrouping : true } ) + "<br>"; result += number.toLocaleString( [ 'jav', 'en' ], { localeMatcher : 'lookup', style : 'decimal', minimumIntegerDigits : 2, minimumFractionDigits : 2, maximumFractionDigits : 3, minimumSignificantDigits : 2, maximumSignificantDigits : 3 } ) + "<br>"; var el = document.getElementById( 'result' ); el.innerHTML = result;
<div id="result"></div>
подробнее о MDN info page.
Edit: авторов комментариев @мне нравится Серена добавляет следующее:
для поддержки браузеров с a неанглийский язык, где мы все еще хотим английское форматирование, используйте
value.toLocaleString('en')
. Также работает для плавающей точки.
пытается справиться с этим с помощью одного регулярного выражения (без обратного вызова) моя текущая способность подводит меня из-за отсутствия негативного взгляда в Javascript... тем не менее, вот еще одна краткая альтернатива, которая работает в большинстве общих случаев - учет любой десятичной точки, игнорируя совпадения, где индекс соответствия появляется после индекса периода.
const format = num => { const n = String(num), p = n.indexOf('.') return n.replace( /\d(?=(?:\d{3})+(?:\.|$))/g, (m, i) => p < 0 || i < p ? `${m},` : m ) } [ format(100), // "100" format(1000), // "1,000" format(1e10), // "10,000,000,000" format(1000.001001) // "1,000.001001" ] .forEach(n => console.log(n))
есть хороший плагин jQuery номер:https://github.com/teamdf/jquery-number
Это позволяет изменить любое число в формате, который вам нравится, с опциями для десятичных цифр и разделителей символов для десятичных и тысяч:
$.number(12345.4556, 2); // -> 12,345.46 $.number(12345.4556, 3, ',', ' ') // -> 12 345,456
вы можете использовать его внутри полей ввода напрямую, что лучше, используя те же параметры, что и выше:
$("input").number(true, 2);
или вы можете применить к целому набору элементов DOM с помощью селектора:
$('span.number').number(true, 2);
// thousand separates a digit-only string using commas // by element: onkeyup = "ThousandSeparate(this)" // by ID: onkeyup = "ThousandSeparate('txt1','lbl1')" function ThousandSeparate() { if (arguments.length == 1) { var V = arguments[0].value; V = V.replace(/,/g,''); var R = new RegExp('(-?[0-9]+)([0-9]{3})'); while(R.test(V)) { V = V.replace(R, ','); } arguments[0].value = V; } else if ( arguments.length == 2) { var V = document.getElementById(arguments[0]).value; var R = new RegExp('(-?[0-9]+)([0-9]{3})'); while(R.test(V)) { V = V.replace(R, ','); } document.getElementById(arguments[1]).innerHTML = V; } else return false; }
Я использую этот:
function numberWithCommas(number) { return number.toString().replace(/\B(?=(\d{3})+(?!\d))/g, ","); }
источник: ссылке
вы можете использовать javascript. ниже приведен код, он будет только
accept
числовые и одинdot
вот javascript
<script > function FormatCurrency(ctrl) { //Check if arrow keys are pressed - we want to allow navigation around textbox using arrow keys if (event.keyCode == 37 || event.keyCode == 38 || event.keyCode == 39 || event.keyCode == 40) { return; } var val = ctrl.value; val = val.replace(/,/g, "") ctrl.value = ""; val += ''; x = val.split('.'); x1 = x[0]; x2 = x.length > 1 ? '.' + x[1] : ''; var rgx = /(\d+)(\d{3})/; while (rgx.test(x1)) { x1 = x1.replace(rgx, '' + ',' + ''); } ctrl.value = x1 + x2; } function CheckNumeric() { return event.keyCode >= 48 && event.keyCode <= 57 || event.keyCode == 46; } </script>
HTML
<input type="text" onkeypress="return CheckNumeric()" onkeyup="FormatCurrency(this)" />
number = 123456.7089; result = parseInt( number ).toLocaleString() + "<br>"; result = number.toLocaleString( 'pt-BR' ) + "<br>"; var el = document.getElementById( 'result' ); el.innerHTML = result;
<div id="result"></div>
var number = 35002343; console.log(number.toLocaleString());
для справки вы можете увидеть здесь https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Number/toLocaleString
PHP.js имеет функцию для этого под названием number_format. Если вы знакомы с PHP он работает точно так же.
все, что вам нужно сделать, это просто этой:
123000.9123.toLocaleString() //result will be "123,000.912"
мне не нравится ни один из ответов здесь, поэтому я создал функцию, которая работает для меня. Просто хочу поделиться, если кто-то еще найдет это полезным.
function getFormattedCurrency(num) { num = num.toFixed(2) var cents = (num - Math.floor(num)).toFixed(2); return Math.floor(num).toLocaleString() + '.' + cents.split('.')[1]; }