[javascript] 선행 0으로 값을 채우려면 어떻게해야합니까?

JavaScript에서 값을 0으로 채우는 권장되는 방법은 무엇입니까? 타입 캐스팅 된 값에 0을 채우는 사용자 정의 함수를 만들 수 있다고 생각하지만 더 직접적인 방법이 있는지 궁금합니다.

참고 : “제로 채워짐”이란 단어의 데이터베이스 의미에서 의미합니다 (숫자 5의 6 자리 숫자로 채워진 표현은 “000005”입니다).



답변

독자에게 참고하십시오!

주석가들이 지적했듯이,이 솔루션은 “영리한”솔루션이며, 영리한 솔루션 인 것처럼 메모리 집약적이고 상대적으로 느립니다. 성능이 문제가되는 경우이 솔루션을 사용하지 마십시오!

구식 가능성 : ECMAScript 2017 포함 String.prototype.padStartNumber.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 localesoptionsarguments 사용 은 ECMAScript가 아니라 ECMA-402에서 개별적으로 표준화됩니다 . 현재 일부 브라우저 는 기본 지원 만 구현합니다 . 즉, toLocaleString()모든 인수를 무시할 수 있습니다.

완전한 예