Есть ли какая-либо функция в Javascript для форматирования числа и строк?
Я ищу способ для разделителя тысяч для строк или чисел... (Как String.Format В С#)
Есть ли какая-либо функция в Javascript для форматирования числа и строк?
Я ищу способ для разделителя тысяч для строк или чисел... (Как String.Format В С#)
Обновление (через 7 лет)
Ссылка, приведенная в первоначальном ответе ниже, неверна. Для этого есть встроенная функция, и именно это kaiser предлагает: 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, '$1' + ',' + '$2');
}
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>
Обновлено с помощью поддержки просмотра в соответствии с изменениями ECMAScript2018.
Для обратной совместимости прокрутите дальше вниз, чтобы увидеть оригинальное решение.
Можно использовать регулярное выражение - особенно полезно при работе с большими числами, хранящимися в виде строк.
const format = num =>
String(num).replace(/(?<!\..*)(\d)(?=(?:\d{3})+(?:\.|$))/g, '$1,')
;[
format(100), // "100"
format(1000), // "1,000"
format(1e10), // "10,000,000,000"
format(1000.001001), // "1,000.001001"
format('100000000000000.001001001001') // "100,000,000,000,000.001001001001
]
.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, '$1,$2');
}
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, '$1,$2');
}
document.getElementById(arguments[1]).innerHTML = V;
}
else return false;
}
var number = 35002343;
console.log(number.toLocaleString());
для справки вы можете проверить здесь https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Number/toLocaleString
Я использую это:
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, '$1' + ',' + '$2');
}
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>
PHP.js имеет функцию, которая называется number_format. Если вы знакомы с PHP, он работает точно так же.
Все, что вам нужно сделать, это просто this:
123000.9123.toLocaleString()
//result will be "123,000.912"
Комбинация растворов для реакции
let converter = Intl.NumberFormat();
let salary = monthlySalary.replace(/,/g,'')
console.log(converter.format(salary))
this.setState({
monthlySalary: converter.format(salary)
})
}
handleOnChangeMonthlySalary(1000)'''
Мне не понравился ни один из ответов здесь, поэтому я создал функцию, которая работала для меня. Просто хочу поделиться, если кто-то найдет это полезным.
function getFormattedCurrency(num) {
num = num.toFixed(2)
var cents = (num - Math.floor(num)).toFixed(2);
return Math.floor(num).toLocaleString() + '.' + cents.split('.')[1];
}