C#와 유사한 자바스크립트의 포맷 번호
C#(또는 VB)에서 사용할 수 있는 포맷 방법과 유사하게 자바스크립트에서 숫자를 포맷하는 간단한 방법이 있습니까?(NET)ToString("format_provider")
아니면String.Format()
?
일반적으로.
InjQuery
- autoNumeric(jQuery 1.5+에 대한 로케일 지원이 있는 괜찮은 숫자 포맷터 및 입력 도우미)
- jQuery Format(Java의 SimpleDate Format 및 번호를 클라이언트 측에서 구현)형식)
- jquery-number formatter(로케일 지원이 있는 숫자 formatter)
예, 자바스크립트에서 숫자를 제대로 포맷하는 방법은 분명히 있습니다. 예를 들어:
var val=2489.8237
val.toFixed(3) //returns 2489.824 (round up)
val.toFixed(2) //returns 2489.82
val.toFixed(7) //returns 2489.8237000 (padding)
가변 이름을 사용하여 고정(Fixed.
그리고 또 다른 기능이 있습니다.toPrecision()
. 자세한 사항은 다음 사이트를 참조할 수 있습니다.
http://raovishal.blogspot.com/2012/01/number-format-in-javascript.html
문자열 형식의 정수에 쉼표를 추가하는 간단한 JS 기능이 있습니다.이것은 정수나 십진 숫자를 다룰 것입니다.번호나 문자열을 전달할 수 있습니다.분명히 문자열을 반환합니다.
function addCommas(str) {
var parts = (str + "").split("."),
main = parts[0],
len = main.length,
output = "",
first = main.charAt(0),
i;
if (first === '-') {
main = main.slice(1);
len = main.length;
} else {
first = "";
}
i = len - 1;
while(i >= 0) {
output = main.charAt(i) + output;
if ((len - i) % 3 === 0 && i > 0) {
output = "," + output;
}
--i;
}
// put sign back
output = first + output;
// put decimal part back
if (parts.length > 1) {
output += "." + parts[1];
}
return output;
}
다음은 테스트 사례입니다. http://jsfiddle.net/jfriend00/6y57j/
이 이전 jsFiddle: http://jsfiddle.net/jfriend00/sMnjT/ 에서 사용되고 있는 것을 확인할 수 있습니다.간단한 구글 검색을 통해 "자바스크립트 쉼표 추가" 기능도 찾을 수 있습니다.
숫자를 문자열로 변환하는 것은 여러 가지 방법으로 가능합니다.가장 쉬운 방법은 문자열에 추가하는 것입니다.
var myNumber = 3;
var myStr = "" + myNumber; // "3"
jsFiddle의 컨텍스트에서 쉼표를 카운터에 입력하려면 다음 줄을 변경해야 합니다.
jTarget.text(current);
다음 항목에 대해:
jTarget.text(addCommas(current));
여기서 작동하는 모습을 보실 수 있습니다: http://jsfiddle.net/jfriend00/CbjSX/
간단한 함수를 작성했습니다. (아직 다른 jQuery 플러그인이 필요하지 않습니다!!)숫자가 처음부터 시작하는 숫자가 아닌 경우 숫자를 10진수로 구분된 문자열 또는 빈 문자열로 변환합니다.
function format(x) {
return isNaN(x)?"":x.toString().replace(/\B(?=(\d{3})+(?!\d))/g, ",");
}
format(578999);
결과를 보다578,999
format(10);
결과를 보다10
쉼표 대신 소수점을 사용하려면 코드의 쉼표를 소수점으로 바꾸기만 하면 됩니다.
설명 중 하나는 이 내용이 정수에 대해서만 작동한다고 정확하게 명시했으며, 몇 가지 작은 수정을 통해 부동 소수점에 대해서도 작동할 수 있습니다.
function format(x) {
if(isNaN(x))return "";
n= x.toString().split('.');
return n[0].replace(/\B(?=(\d{3})+(?!\d))/g, ",")+(n.length>1?"."+n[1]:"");
}
다음은 모두 테스트 스위트, 테스트 스위트 및 벤치마크를 통과하는 몇 가지 솔루션입니다. 테스트할 복사 및 붙여넣기를 원하는 경우 이 Gist를 사용해 보십시오.
방법 0 (RegExp)
https://stackoverflow.com/a/14428340/1877620, 을 기준으로 하지만 소수점이 없으면 수정합니다.
if (typeof Number.prototype.format === 'undefined') {
Number.prototype.format = function (precision) {
if (!isFinite(this)) {
return this.toString();
}
var a = this.toFixed(precision).split('.');
a[0] = a[0].replace(/\d(?=(\d{3})+$)/g, '$&,');
return a.join('.');
}
}
방법1
if (typeof Number.prototype.format1 === 'undefined') {
Number.prototype.format1 = function (precision) {
if (!isFinite(this)) {
return this.toString();
}
var a = this.toFixed(precision).split('.'),
// skip the '-' sign
head = Number(this < 0);
// skip the digits that's before the first thousands separator
head += (a[0].length - head) % 3 || 3;
a[0] = a[0].slice(0, head) + a[0].slice(head).replace(/\d{3}/g, ',$&');
return a.join('.');
};
}
방법 2(배열로 분할)
if (typeof Number.prototype.format2 === 'undefined') {
Number.prototype.format2 = function (precision) {
if (!isFinite(this)) {
return this.toString();
}
var a = this.toFixed(precision).split('.');
a[0] = a[0]
.split('').reverse().join('')
.replace(/\d{3}(?=\d)/g, '$&,')
.split('').reverse().join('');
return a.join('.');
};
}
방법 3 (루프)
if (typeof Number.prototype.format3 === 'undefined') {
Number.prototype.format3 = function (precision) {
if (!isFinite(this)) {
return this.toString();
}
var a = this.toFixed(precision).split('');
a.push('.');
var i = a.indexOf('.') - 3;
while (i > 0 && a[i-1] !== '-') {
a.splice(i, 0, ',');
i -= 3;
}
a.pop();
return a.join('');
};
}
예
console.log('======== Demo ========')
var n = 0;
for (var i=1; i<20; i++) {
n = (n * 10) + (i % 10)/100;
console.log(n.format(2), (-n).format(2));
}
구분자
맞춤형 수천 구분 기호 또는 소수 구분 기호를 사용하려면 replace():
123456.78.format(2).replace(',', ' ').replace('.', ' ');
테스트 스위트
function assertEqual(a, b) {
if (a !== b) {
throw a + ' !== ' + b;
}
}
function test(format_function) {
console.log(format_function);
assertEqual('NaN', format_function.call(NaN, 0))
assertEqual('Infinity', format_function.call(Infinity, 0))
assertEqual('-Infinity', format_function.call(-Infinity, 0))
assertEqual('0', format_function.call(0, 0))
assertEqual('0.00', format_function.call(0, 2))
assertEqual('1', format_function.call(1, 0))
assertEqual('-1', format_function.call(-1, 0))
// decimal padding
assertEqual('1.00', format_function.call(1, 2))
assertEqual('-1.00', format_function.call(-1, 2))
// decimal rounding
assertEqual('0.12', format_function.call(0.123456, 2))
assertEqual('0.1235', format_function.call(0.123456, 4))
assertEqual('-0.12', format_function.call(-0.123456, 2))
assertEqual('-0.1235', format_function.call(-0.123456, 4))
// thousands separator
assertEqual('1,234', format_function.call(1234.123456, 0))
assertEqual('12,345', format_function.call(12345.123456, 0))
assertEqual('123,456', format_function.call(123456.123456, 0))
assertEqual('1,234,567', format_function.call(1234567.123456, 0))
assertEqual('12,345,678', format_function.call(12345678.123456, 0))
assertEqual('123,456,789', format_function.call(123456789.123456, 0))
assertEqual('-1,234', format_function.call(-1234.123456, 0))
assertEqual('-12,345', format_function.call(-12345.123456, 0))
assertEqual('-123,456', format_function.call(-123456.123456, 0))
assertEqual('-1,234,567', format_function.call(-1234567.123456, 0))
assertEqual('-12,345,678', format_function.call(-12345678.123456, 0))
assertEqual('-123,456,789', format_function.call(-123456789.123456, 0))
// thousands separator and decimal
assertEqual('1,234.12', format_function.call(1234.123456, 2))
assertEqual('12,345.12', format_function.call(12345.123456, 2))
assertEqual('123,456.12', format_function.call(123456.123456, 2))
assertEqual('1,234,567.12', format_function.call(1234567.123456, 2))
assertEqual('12,345,678.12', format_function.call(12345678.123456, 2))
assertEqual('123,456,789.12', format_function.call(123456789.123456, 2))
assertEqual('-1,234.12', format_function.call(-1234.123456, 2))
assertEqual('-12,345.12', format_function.call(-12345.123456, 2))
assertEqual('-123,456.12', format_function.call(-123456.123456, 2))
assertEqual('-1,234,567.12', format_function.call(-1234567.123456, 2))
assertEqual('-12,345,678.12', format_function.call(-12345678.123456, 2))
assertEqual('-123,456,789.12', format_function.call(-123456789.123456, 2))
}
console.log('======== Testing ========');
test(Number.prototype.format);
test(Number.prototype.format1);
test(Number.prototype.format2);
test(Number.prototype.format3);
벤치마크
function benchmark(f) {
var start = new Date().getTime();
f();
return new Date().getTime() - start;
}
function benchmark_format(f) {
console.log(f);
time = benchmark(function () {
for (var i = 0; i < 100000; i++) {
f.call(123456789, 0);
f.call(123456789, 2);
}
});
console.log(time.format(0) + 'ms');
}
async = [];
function next() {
setTimeout(function () {
f = async.shift();
f && f();
next();
}, 10);
}
console.log('======== Benchmark ========');
async.push(function () { benchmark_format(Number.prototype.format); });
async.push(function () { benchmark_format(Number.prototype.format1); });
async.push(function () { benchmark_format(Number.prototype.format2); });
async.push(function () { benchmark_format(Number.prototype.format3); });
next();
jQuery를 사용하지 않으려면 Numberal.js를 보십시오.
첫째, JS에서 정수를 문자열로 변환하는 것은 정말 간단합니다.
// Start off with a number
var number = 42;
// Convert into a string by appending an empty (or whatever you like as a string) to it
var string = 42+'';
// No extra conversion is needed, even though you could actually do
var alsoString = number.toString();
만약 당신이 숫자를 문자열로 가지고 있고 그것을 정수로 바꾸기를 원한다면 당신은 다음을 사용해야 합니다.parseInt(string)
정수의 경우 및parseFloat(string)
부유물용으로 두 원하는 합니다.그러면 두 함수 모두 원하는 정수/플로트를 반환합니다.예:
// Start off with a float as a string
var stringFloat = '3.14';
// And an int as a string
var stringInt = '42';
// typeof stringInt would give you 'string'
// Get the real float from the string
var realFloat = parseFloat(someFloat);
// Same for the int
var realInt = parseInt(stringInt);
// but typeof realInt will now give you 'number'
당신은 정확히 무엇을 덧붙이려고 하는 것인지 등은 당신의 질문에서 저에게 불분명합니다.
http://code.google.com/p/javascript-number-formatter/ :
- 짧고 빠르며 유연하면서도 독립형.MIT 라이선스 정보, 빈 줄 및 코멘트를 포함한 75줄만 해당됩니다.
- #,##0.00 또는 음수 -000과 같은 표준 숫자 형식을 사용합니다.####.
- ##0,00, #,###과 같은 국가 형식을 사용할 수 있습니다.##, #'###.## 또는 numbering가 아닌 모든 유형의 기호.
- 숫자 그룹화를 허용합니다.#,##,#0.000 또는 #,###0.## 모두 유효합니다.
- 중복/풀림 방지 형식을 사용할 수 있습니다.##,###,##.# 또는 0#,#00#.###0# 다 괜찮습니다.
- 자동 번호 반올림.
- 간단한 인터페이스, 그냥 마스크와 같은 값을 제공합니다: 포맷 ("0.0000", 3.141592)
갱신하다
Tomásh Zato는 다음과 같은 한 가지 해결책을 제시합니다.
(666.0).toLocaleString()
numObj.toLocaleString([locales [, options]])
ECMA-2625.1판에 설명된 내용:
- http://www.ecma-international.org/ecma-262/5.1/ #sec-15.7.4.3
- https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/Number/toLocaleString
향후 버전의 브라우저에서 작동할 것입니다.
예를 들어,
var flt = '5.99';
var nt = '6';
var rflt = parseFloat(flt);
var rnt = parseInt(nt);
JQuery를 사용합니다.
$(document).ready(function()
{
//Only number and one dot
function onlyDecimal(element, decimals)
{
$(element).keypress(function(event)
{
num = $(this).val() ;
num = isNaN(num) || num === '' || num === null ? 0.00 : num ;
if ((event.which != 46 || $(this).val().indexOf('.') != -1) && (event.which < 48 || event.which > 57))
{
event.preventDefault();
}
if($(this).val() == parseFloat(num).toFixed(decimals))
{
event.preventDefault();
}
});
}
onlyDecimal("#TextBox1", 3) ;
});
쉼표 뒤에 숫자가 2개인 10진수를 얻으려면 다음을 사용하면 됩니다.
function nformat(a) {
var b = parseInt(parseFloat(a)*100)/100;
return b.toFixed(2);
}
로케일 기반 포맷은 numbro를, 일반적인 경우는 numbro를 제안해도 될까요?사용 사례에 따라 두 가지를 조합하는 것이 도움이 될 수 있습니다.
다른 버전은 다음과 같습니다.
$.fn.digits = function () {
return this.each(function () {
var value = $(this).text();
var decimal = "";
if (value) {
var pos = value.indexOf(".");
if (pos >= 0) {
decimal = value.substring(pos);
value = value.substring(0, pos);
}
if (value) {
value = value.replace(/(\d)(?=(\d\d\d)+(?!\d))/g, "$1,");
if (!String.isNullOrEmpty(decimal)) value = (value + decimal);
$(this).text(value);
}
}
else {
value = $(this).val()
if (value) {
var pos = value.indexOf(".");
if (pos >= 0) {
decimal = value.substring(pos);
value = value.substring(0, pos);
}
if (value) {
value = value.replace(/(\d)(?=(\d\d\d)+(?!\d))/g, "$1,");
if (!String.isNullOrEmpty(decimal)) value = (value + decimal);
$(this).val(value);
}
}
}
})
};
간단한 기능을 만들었어요, 아마 누군가 사용할 수 있을 겁니다.
function secsToTime(secs){
function format(number){
if(number===0){
return '00';
}else {
if (number < 10) {
return '0' + number
} else{
return ''+number;
}
}
}
var minutes = Math.floor(secs/60)%60;
var hours = Math.floor(secs/(60*60))%24;
var days = Math.floor(secs/(60*60*24));
var seconds = Math.floor(secs)%60;
return (days>0? days+"d " : "")+format(hours)+':'+format(minutes)+':'+format(seconds);
}
다음과 같은 출력을 생성할 수 있습니다.
- 5d 02:53:39
- 4d 22:15:16
- 03:01:05
- 00:00:00
계산이 아닌 보기를 위해 숫자를 포맷하려는 경우 이를 사용할 수 있습니다.
function numberFormat( number ){
var digitCount = (number+"").length;
var formatedNumber = number+"";
var ind = digitCount%3 || 3;
var temparr = formatedNumber.split('');
if( digitCount > 3 && digitCount <= 6 ){
temparr.splice(ind,0,',');
formatedNumber = temparr.join('');
}else if (digitCount >= 7 && digitCount <= 15) {
var temparr2 = temparr.slice(0, ind);
temparr2.push(',');
temparr2.push(temparr[ind]);
temparr2.push(temparr[ind + 1]);
// temparr2.push( temparr[ind + 2] );
if (digitCount >= 7 && digitCount <= 9) {
temparr2.push(" million");
} else if (digitCount >= 10 && digitCount <= 12) {
temparr2.push(" billion");
} else if (digitCount >= 13 && digitCount <= 15) {
temparr2.push(" trillion");
}
formatedNumber = temparr2.join('');
}
return formatedNumber;
}
입력: {Integer} 번호
출력: {String} 번호
22,870 => 번호 22870인 경우
22,87백만 => 번호 2287xxxxx일 경우 (x는 무엇이든 가능)
22,877억 => 번호 2287xxxxxxx인 경우
22,87조 => 번호 2287xxxxxxxxxxx인 경우
당신은 그 생각을 압니다.
jfriend00의 답변을 더 진행하기 위해 (댓글을 달기에 부족한 점이 있습니다) 저는 그의 답변을 다음으로 확장하였습니다:
function log(args) {
var str = "";
for (var i = 0; i < arguments.length; i++) {
if (typeof arguments[i] === "object") {
str += JSON.stringify(arguments[i]);
} else {
str += arguments[i];
}
}
var div = document.createElement("div");
div.innerHTML = str;
document.body.appendChild(div);
}
Number.prototype.addCommas = function (str) {
if (str === undefined) {
str = this;
}
var parts = (str + "").split("."),
main = parts[0],
len = main.length,
output = "",
first = main.charAt(0),
i;
if (first === '-') {
main = main.slice(1);
len = main.length;
} else {
first = "";
}
i = len - 1;
while(i >= 0) {
output = main.charAt(i) + output;
if ((len - i) % 3 === 0 && i > 0) {
output = "," + output;
}
--i;
}
// put sign back
output = first + output;
// put decimal part back
if (parts.length > 1) {
output += "." + parts[1];
}
return output;
}
var testCases = [
1, 12, 123, -1234, 12345, 123456, -1234567, 12345678, 123456789,
-1.1, 12.1, 123.1, 1234.1, -12345.1, -123456.1, -1234567.1, 12345678.1, 123456789.1
];
for (var i = 0; i < testCases.length; i++) {
log(testCases[i].addCommas());
}
/*for (var i = 0; i < testCases.length; i++) {
log(Number.addCommas(testCases[i]));
}*/
다음과 같은 방법으로 수행할 수 있습니다.따라서 숫자의 형식을 지정할 뿐만 아니라 사용자 지정 십진법 및 마일 구분자를 설정할 십진법 자릿수를 매개 변수로 전달할 수도 있습니다.
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}`;
}
용도:
let min = 1556454.0001;
let max = 15556982.9999;
console.time('number format');
for (let i = 0; i < 15000; i++) {
let randomNumber = Math.random() * (max - min) + min;
let formated = format(randomNumber, 4, ',', '.'); // formated number
console.debug('number: ', randomNumber, 'formated: ', formated);
}
console.timeEnd('number format');
언급URL : https://stackoverflow.com/questions/1068284/format-numbers-in-javascript-similar-to-c-sharp
'programing' 카테고리의 다른 글
CSS에서 한 입력 자리 표시자에 두 가지 다른 글꼴 크기를 가질 수 있습니까? (0) | 2023.10.29 |
---|---|
jQuery가 ID에 .(주기)가 있는 요소를 선택하도록 하려면 어떻게 해야 합니까? (0) | 2023.10.29 |
대괄호 자바스크립트 객체 키 (0) | 2023.10.29 |
Vim에서 C/C++ 리팩토링(예: Eclipse에서와 같은 방법 추출) (0) | 2023.10.29 |
아이들이 가로축을 채우도록 신장시키는 방법은? (0) | 2023.10.29 |