Programming

JavaScript에서 선행 0으로 숫자 채우기

procodes 2020. 2. 20. 23:37
반응형

JavaScript에서 선행 0으로 숫자 채우기


중복 가능성 :
JavaScript를 사용하여 Zerofilled 값을 만들려면 어떻게해야합니까?

JavaScript에서는 패딩이 필요합니다.

예를 들어 숫자 9를 사용하면 "0009"가됩니다. 숫자 10이라고하면 "0010"이됩니다. 항상 네 자리 숫자를 어떻게 포함하는지 주목하십시오.

이 작업을 수행하는 한 가지 방법은 숫자에서 4를 빼서 0을 뺀 것입니다.

이 작업을 수행하는 더 매끄러운 방법이 있습니까?


지금까지 진행중인 많은 "슬릭 (slick)"은 아닙니다.

function pad(n, width, z) {
  z = z || '0';
  n = n + '';
  return n.length >= width ? n : new Array(width - n.length + 1).join(z) + n;
}

숫자로 배열을 초기화하면 배열 length에 해당 값으로 설정된 배열이 만들어 지므로 배열에 많은 undefined요소 가 포함 된 것처럼 보입니다 . 일부 Array 인스턴스 메서드 .join()이없는 배열 요소를 건너 뛰지 만 적어도 완벽하지는 않습니다. 값이 빈 문자열 인 것처럼 처리합니다. 따라서 각 배열 요소 사이에 0 문자 (또는 "z"가 무엇이든)의 사본을 얻습니다. 그래서 거기에있는 이유가 + 1있습니다.

사용법 예 :

pad(10, 4);      // 0010
pad(9, 4);       // 0009
pad(123, 4);     // 0123

pad(10, 4, '-'); // --10

function padToFour(number) {
  if (number<=9999) { number = ("000"+number).slice(-4); }
  return number;
}

그런 것?

이해하기 쉽지만 매끄러운 보너스 ES6 버전 보너스 :

let padToFour = number => number <= 9999 ? `000${number}`.slice(-4) : number;

ES6isms :

  • let블록 범위 변수입니다 ( var함수 범위 지정 과 반대 )
  • =>다른 무엇보다도 function매개 변수로 대체되는 화살표 기능입니다.
  • 화살표 함수가 단일 매개 변수를 사용하면 괄호를 생략 할 수 있습니다 (따라서 number =>)
  • 화살표 함수 본문에 한 줄로 시작하는 return경우 중괄호와 return키워드를 생략 하고 간단히 표현식을 사용할 수 있습니다
  • 함수 본문을 한 줄로 줄이려면 속이 고 삼항 식을 사용했습니다.

시험:

String.prototype.lpad = function(padString, length) {
    var str = this;
    while (str.length < length)
        str = padString + str;
    return str;
}

이제 테스트 :

var str = "5";
alert(str.lpad("0", 4)); //result "0005"
var str = "10"; // note this is string type
alert(str.lpad("0", 4)); //result "0010"

DEMO


에서 ECMAScript를 8 , 우리는 새로운 방법이 padStartpadEnd구문 아래에 있습니다.

'string'.padStart (targetLength [, padString]) :

이제 사용할 수 있습니다

const str = "5";
str.padStart(4, '0'); // '0005'

웃긴, 나는 최근에 이것을해야했다.

function padDigits(number, digits) {
    return Array(Math.max(digits - String(number).length + 1, 0)).join(0) + number;
}

다음과 같이 사용하십시오.

padDigits(9, 4);  // "0009"
padDigits(10, 4); // "0010"
padDigits(15000, 4); // "15000"

아름답지는 않지만 효과적입니다.


당신은 당신이 숫자가 있다고 말했다

String.prototype.padZero= function(len, c){
    var s= '', c= c || '0', len= (len || 2)-this.length;
    while(s.length<len) s+= c;
    return s+this;
}
Number.prototype.padZero= function(len, c){
    return String(this).padZero(len,c);
}

다음과 같이 할 수 있습니다.

function pad ( num, size ) {
  return ( Math.pow( 10, size ) + ~~num ).toString().substring( 1 );
}

편집 : 이것은 함수에 대한 기본 아이디어 일뿐이지만 더 큰 숫자 (유효하지 않은 입력)에 대한 지원을 추가하는 것이 좋습니다.

function pad ( num, size ) {
  if (num.toString().length >= size) return num;
  return ( Math.pow( 10, size ) + Math.floor(num) ).toString().substring( 1 );
}

이것은 두 가지 일을합니다.

  1. 숫자가 지정된 크기보다 크면 단순히 숫자를 반환합니다.
  2. Math.floor(num)대신 사용하면 ~~num더 큰 숫자가 지원됩니다.

재미를 위해 루프를 사용하여 여분의 0을 만드는 대신 :

function zeroPad(n,length){
  var s=n+"",needed=length-s.length;
  if (needed>0) s=(Math.pow(10,needed)+"").slice(1)+s;
  return s;
}

이것은 실제로 '매끄러운'것은 아니지만 각 패딩에 대해 문자열 연결을 수행하는 것보다 정수 연산을 수행하는 것이 더 빠릅니다 0.

function ZeroPadNumber ( nValue )
{
    if ( nValue < 10 )
    {
        return ( '000' + nValue.toString () );
    }
    else if ( nValue < 100 )
    {
        return ( '00' + nValue.toString () );
    }
    else if ( nValue < 1000 )
    {
        return ( '0' + nValue.toString () );
    }
    else
    {
        return ( nValue );
    }
}

이 기능은 또한 특정 요구 (4 자리 패딩)에 맞게 하드 코딩되므로 일반적이지 않습니다.


항상 길이가 4라고 언급 했으므로이 매끄러운 확인을 위해 오류 검사를하지 않습니다. ;)

function pad(input) {
    var BASE = "0000";
    return input ? BASE.substr(0, 4 - Math.ceil(input / 10)) + input : BASE;
}

아이디어 : 단순히 '0000'을 제공된 숫자로 바꾸십시오 ... 문제 input는 0이면 '0000'을 반환하도록 하드 코딩해야합니다. LOL.

충분히 매끄러 워야합니다.

JSFiddler : http://jsfiddle.net/Up5Cr/

참고 URL : https://stackoverflow.com/questions/10073699/pad-a-number-with-leading-zeros-in-javascript



반응형