[javascript] 선행 0으로 값을 채우려면 어떻게해야합니까?
JavaScript에서 값을 0으로 채우는 권장되는 방법은 무엇입니까? 타입 캐스팅 된 값에 0을 채우는 사용자 정의 함수를 만들 수 있다고 생각하지만 더 직접적인 방법이 있는지 궁금합니다.
참고 : “제로 채워짐”이란 단어의 데이터베이스 의미에서 의미합니다 (숫자 5의 6 자리 숫자로 채워진 표현은 “000005”입니다).
답변
독자에게 참고하십시오!
주석가들이 지적했듯이,이 솔루션은 “영리한”솔루션이며, 영리한 솔루션 인 것처럼 메모리 집약적이고 상대적으로 느립니다. 성능이 문제가되는 경우이 솔루션을 사용하지 마십시오!
구식 일 가능성 : ECMAScript 2017 포함 String.prototype.padStart 및 Number.prototype.toLocaleString는 ECMAScript를 3.1 이후있다. 예:
var n=-0.1; n.toLocaleString('en', {minimumIntegerDigits:4,minimumFractionDigits:2,useGrouping:false})
“-0000.10″을 출력합니다.
// or const padded = (.1+"").padStart(6,"0"); `-${padded}`
“-0000.1″이 출력됩니다.
간단한 기능 만 있으면됩니다
function zeroFill( number, width )
{
width -= number.toString().length;
if ( width > 0 )
{
return new Array( width + (/\./.test( number ) ? 2 : 1) ).join( '0' ) + number;
}
return number + ""; // always return a string
}
네임 스페이스 등을 보존하려는 경우이를 라이브러리에 구울 수 있습니다. 와 같이 jQuery를이 확장이다 .
답변
간단한 방법. 패드에 문자열 곱셈을 추가하여 함수로 바꿀 수 있습니다.
var pad = "000000";
var n = '5';
var result = (pad+n).slice(-pad.length);
함수로서
function paddy(num, padlen, padchar) {
var pad_char = typeof padchar !== 'undefined' ? padchar : '0';
var pad = new Array(1 + padlen).join(pad_char);
return (pad + num).slice(-pad.length);
}
var fu = paddy(14, 5); // 00014
var bar = paddy(2, 4, '#'); // ###2
답변
나는 여기에 대한 모든 복잡한 대답을 믿을 수 없다 … 그냥 이것을 사용하십시오 :
var zerofilled = ('0000'+n).slice(-4);
답변
나는 최근에 이와 비슷한 것을 생각해 내야했다. 루프를 사용하지 않고 할 수있는 방법이 있어야한다고 생각했습니다.
이것이 내가 생각해 낸 것입니다.
function zeroPad(num, numZeros) {
var n = Math.abs(num);
var zeros = Math.max(0, numZeros - Math.floor(n).toString().length );
var zeroString = Math.pow(10,zeros).toString().substr(1);
if( num < 0 ) {
zeroString = '-' + zeroString;
}
return zeroString+n;
}
그런 다음 제로 패드에 숫자를 제공하여 사용하십시오.
> zeroPad(50,4);
"0050"
숫자가 패딩보다 크면 숫자가 패딩을 넘어 확장됩니다.
> zeroPad(51234, 3);
"51234"
소수도 괜찮습니다!
> zeroPad(51.1234, 4);
"0051.1234"
전역 네임 스페이스를 오염시키지 않아도 Number에 직접 추가 할 수 있습니다.
Number.prototype.leftZeroPad = function(numZeros) {
var n = Math.abs(this);
var zeros = Math.max(0, numZeros - Math.floor(n).toString().length );
var zeroString = Math.pow(10,zeros).toString().substr(1);
if( this < 0 ) {
zeroString = '-' + zeroString;
}
return zeroString+n;
}
패딩에서 소수점 이하 자리를 차지하려면 다음과 같이하십시오.
Number.prototype.leftZeroPad = function(numZeros) {
var n = Math.abs(this);
var zeros = Math.max(0, numZeros - n.toString().length );
var zeroString = Math.pow(10,zeros).toString().substr(1);
if( this < 0 ) {
zeroString = '-' + zeroString;
}
return zeroString+n;
}
건배!
XDR 은 더 나은 성능을 보이는 로그 변형 을 만들어 냈습니다 .
경고 :이 함수는 숫자가 0과 같은 경우 실패합니다 (예 : zeropad (0, 2))
function zeroPad (num, numZeros) {
var an = Math.abs (num);
var digitCount = 1 + Math.floor (Math.log (an) / Math.LN10);
if (digitCount >= numZeros) {
return num;
}
var zeroString = Math.pow (10, numZeros - digitCount).toString ().substr (1);
return num < 0 ? '-' + zeroString + an : zeroString + an;
}
tomsmeding 은 성능에 대해 상위 3 개의 답변을 비교했습니다 ( 4는 로그 변형 ). 어느 쪽 이 다른 쪽을 크게 능가할까요? 🙂
답변
다음은 최대 7 자의 숫자를 채우는 데 사용한 것입니다.
("0000000" + number).slice(-7)
이 방법은 아마도 대부분의 사람들에게 충분할 것입니다.
편집 : 좀 더 일반적인 것으로 만들려면 다음을 수행하십시오.
("0".repeat(padding) + number).slice(-padding)
편집 2 : ES2017부터 다음을 사용할 수 있습니다 String.prototype.padStart
.
number.toString().padStart(padding, "0")
답변
최신 브라우저는 이제를 지원합니다. 이제 padStart
간단하게 수행 할 수 있습니다.
string.padStart(maxLength, "0");
예:
string = "14";
maxLength = 5; // maxLength is the max string length, not max # of fills
res = string.padStart(maxLength, "0");
console.log(res); // prints "00014"
답변
불행하게도,이 문제에 대한 복잡한 제안은 많지 않습니다. 일반적으로 수학이나 문자열 조작을위한 자신의 함수를 작성하거나 타사 유틸리티를 호출하는 것과 관련이 있습니다. 그러나 기본 JavaScript 라이브러리에는 한 줄의 코드만으로이 작업을 수행하는 표준 방법이 있습니다. 로컬 이름이나 스타일처럼 절대 변경하지 않으려는 매개 변수를 지정하지 않아도되도록 함수에이 한 줄의 코드를 래핑하는 것이 좋습니다.
var amount = 5;
var text = amount.toLocaleString('en-US',
{
style: 'decimal',
minimumIntegerDigits: 3,
useGrouping: false
});
텍스트에 대해 “005”값이 생성됩니다. Number의 toLocaleString 함수를 사용하여 소수점 오른쪽에 0을 채울 수도 있습니다.
var amount = 5;
var text = amount.toLocaleString('en-US',
{
style: 'decimal',
minimumFractionDigits: 2,
useGrouping: false
});
텍스트의 값이 “5.00”이됩니다. 수천에 쉼표 구분 기호를 사용하려면 useGrouping을 true로 변경하십시오.
toLocaleString()
with locales
및 options
arguments 사용 은 ECMAScript가 아니라 ECMA-402에서 개별적으로 표준화됩니다 . 현재 일부 브라우저 는 기본 지원 만 구현합니다 . 즉, toLocaleString()
모든 인수를 무시할 수 있습니다.