Javascript에 숫자와 문자열을 형식화하는 기능이 있습니까?
문자열 또는 숫자에 대한 천 구분 기호에 대한 방법을 찾고 있습니다 ... (C #의 String.Format처럼)
Javascript에 숫자와 문자열을 형식화하는 기능이 있습니까?
문자열 또는 숫자에 대한 천 구분 기호에 대한 방법을 찾고 있습니다 ... (C #의 String.Format처럼)
How to print a number with commas as thousands separators in JavaScript
: stackoverflow.com/questions/2901102/...
답변:
업데이트 (7 년 후)
아래 원래 답변에 인용 된 참조가 잘못되었습니다. 가 되고 a는 정확히 어떤이에 대한 기능을 내장 카이저는 아래의 제안 :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;
}
편집 : 다른 방법으로 이동하려면 (쉼표가있는 문자열을 숫자로 변환) 다음과 같이 할 수 있습니다.
parseFloat("1,234,567.89".replace(/,/g,''))
(1234567).toLocaleString().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 정보 페이지 에 대한 세부 정보 .
편집 : 댓글 작성자 @I like Serena 는 다음을 추가합니다.
영어 형식이 필요한 비 영어 로케일의 브라우저를 지원하려면
value.toLocaleString('en')
. 부동 소수점에서도 작동합니다.
Number(yourNumberOrString).toLocaleString()
value.toLocaleString('en')
. 부동 소수점에서도 작동합니다.
ECMAScript2018 변경 사항에 따라 look-behind 지원을 사용하여 업데이트되었습니다.
이전 버전과의 호환성을 위해 더 아래로 스크롤하여 원래 솔루션을 확인하십시오.
정규식을 사용할 수 있습니다. 특히 문자열로 저장된 큰 숫자를 처리하는 데 유용합니다.
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))
이 원래 답변은 필수는 아니지만 이전 버전과의 호환성을 위해 사용할 수 있습니다.
단일 정규식 (콜백없이) 으로 이것을 처리하려고 시도하면 현재 능력이 Javascript에서 부정적인 look-behind가 없기 때문에 실패합니다. 기간 색인 뒤에 일치 색인이 나타나는 일치 항목을 무시합니다.
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"
format('100000000000000.001001001001') // "100,000,000,000,000.001001001001
]
.forEach(n => console.log(n))
멋진 jQuery 번호 플러그인이 있습니다 : https://github.com/teamdf/jquery-number
10 진수 및 10 진수 및 천 단위 구분 문자 옵션을 사용하여 원하는 형식으로 숫자를 변경할 수 있습니다.
$.number(12345.4556, 2); // -> 12,345.46
$.number(12345.4556, 3, ',', ' ') // -> 12 345,456
위와 같은 옵션을 사용하여 입력 필드 내에서 직접 사용할 수 있습니다.
$("input").number(true, 2);
또는 선택기를 사용하여 전체 DOM 요소 집합에 적용 할 수 있습니다.
$('span.number').number(true, 2);
나는 이것을 사용한다 :
function numberWithCommas(number) {
return number.toString().replace(/\B(?=(\d{3})+(?!\d))/g, ",");
}
출처 : 링크
'123452343267.0505'.replace(/\B(?=(\d{3})+(?!\d))/g, ","); "123,452,343,267.0,505"
-소수점 뒤의 마지막 쉼표에 주목하십시오.
// 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에서 확인할 수 있습니다.
자바 스크립트를 사용할 수 있습니다. 아래는 코드입니다. accept
숫자와 하나만dot
여기 자바 스크립트입니다
<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)" />
PHP.js에는 number_format 이라는 함수가 있습니다. PHP에 익숙하다면 똑같은 방식으로 작동 합니다 .
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>
당신이해야 할 일은 정말로 다음과 같습니다.
123000.9123.toLocaleString()
//result will be "123,000.912"
toLocaleString()
쉼표를 추가하지 않거나 표준의 다른 기능이 부족합니다. toLocaleString
존재 여부 를 확인하는 것은 쉽지만 준수 여부는 확인하지 않습니다.
반응을위한 솔루션 조합
let converter = Intl.NumberFormat();
let salary = monthlySalary.replace(/,/g,'')
console.log(converter.format(salary))
this.setState({
monthlySalary: converter.format(salary)
})
}
handleOnChangeMonthlySalary(1000)```
ngx-format-field를 사용할 수 있습니다. 보기에 표시 될 입력 값을 형식화하는 지시문입니다. 백엔드에 저장 될 입력 값을 조작하지 않습니다. 여기 링크 참조 !
예:
component.html:
<input type="text" formControlName="currency" [appFormatFields]="CURRENCY"
(change)="onChangeCurrency()">
component.ts
onChangeCurrency() {
this.currency.patchValue(this.currency.value);
}
데모를 보려면 여기 !
다음 기능을 사용할 수 있습니다.
function format(number, decimals = 2, decimalSeparator = '.', thousandsSeparator = ',') {
const roundedNumber = number.toFixed(decimals);
let integerPart = '',
fractionalPart = '';
if (decimals == 0) {
integerPart = roundedNumber;
decimalSeparator = '';
} else {
let numberParts = roundedNumber.split('.');
integerPart = numberParts[0];
fractionalPart = numberParts[1];
}
integerPart = integerPart.replace(/(\d)(?=(\d{3})+(?!\d))/g, `$1${thousandsSeparator}`);
return `${integerPart}${decimalSeparator}${fractionalPart}`;
}
// Use Example
let min = 1556454.0001;
let max = 15556982.9999;
console.time('number format');
for (let i = 0; i < 15; i++) {
let randomNumber = Math.random() * (max - min) + min;
let formated = format(randomNumber, 4, ',', '.'); // formated number
console.log('number: ', randomNumber, '; formated: ', formated);
}
console.timeEnd('number format');