source

10보다 작음 숫자에 0을 더합니다.

ittop 2023. 7. 31. 21:55
반응형

10보다 작음 숫자에 0을 더합니다.

10보다 작은 숫자 앞에 0을 추가하도록 이 코드를 수정하려면 어떻게 해야 합니까?

$('#detect').html( toGeo(apX, screenX)  + latT +', '+ toGeo(apY, screenY) + lonT  );

function toGeo(d, max) {
   var c = '';

   var r = d/max * 180;
   var deg = Math.floor(r);
   c += deg + "° ";

   r = (r - deg) * 60;
   var min = Math.floor(r);
   c += min + "′ ";

   r = (r - min) * 60;
   var sec = Math.floor(r);
   c += sec + "″";

   return c;
}

그래서 출력은 에서 변경됩니다.

4° 7' 34ºW, 168° 1' 23ºN

로.

04° 07' 34ºW, 168° 01' 23ºN

시간 내주셔서 감사합니다.

언제든지 할 수 있습니다.

('0' + deg).slice(-2)

참조:

음수를 사용하여 배열 끝에서 선택할 수도 있습니다.

이런 이유로

('0' + 11).slice(-2) // '11'
('0' + 4).slice(-2)  // '04'

액세스의 용이성을 위해 당연히 함수에 추출하거나 확장할 수 있습니다.Number포함:

Number.prototype.pad = function(n) {
    return new Array(n).join('0').slice((n || 2) * -1) + this;
}

이를 통해 다음을 작성할 수 있습니다.

c += deg.pad() + '° '; // "04° "

위의 기능pad원하는 문자열의 길이를 지정하는 인수를 사용합니다.이러한 인수가 사용되지 않으면 기본값은 2입니다.다음과 같이 쓸 수 있습니다.

deg.pad(4) // "0045"

의 가치가 명백한 단점에 주목하십시오.n0의 문자열은 현재 10자에 불과하므로 11보다 클 수 없습니다.물론 이것은 기술적인 해결책이 될 수 있지만, 저는 그렇게 간단한 기능에 복잡성을 도입하고 싶지 않았습니다.(선택할 경우 알렉스의 답변을 참조하여 이에 대한 탁월한 접근 방식을 확인하십시오.)

또한 쓰기가 불가능합니다.2.pad()변수에서만 작동합니다.그러나 변수가 아닌 경우에는 숫자가 몇 자리로 구성되어 있는지 항상 미리 알 수 있습니다.

재사용할 수 있는 기능을 만듭니다.

function minTwoDigits(n) {
  return (n < 10 ? '0' : '') + n;
}

그런 다음 좌표의 각 부분에서 사용합니다.

c += minTwoDigits(deg) + "° ";

등등.

if(myNumber.toString().length < 2)
   myNumber= "0"+myNumber;

또는:

return (myNumber.toString().length < 2) ? "0"+myNumber : myNumber;

언제든지 할 수 있습니다.

('0' + deg).slice(-2)

자주 사용하는 경우 객체 번호를 확장할 수 있습니다.

Number.prototype.pad = function(n) {
    if (n==undefined)
        n = 2;

    return (new Array(n).join('0') + this).slice(-n);
}

deg.pad(4) // "0045"

여기서 패드 크기를 설정하거나 기본값 2를 유지할 수 있습니다.

일반 함수를 작성하여 이 작업을 수행할 수 있습니다.

var numberFormat = function(number, width) {
    return new Array(+width + 1 - (number + '').length).join('0') + number;
}

jsFiddle.

그래야 임의의 폭을 다루는 것이 문제가 되지 않습니다.

숫자 문자열의 크기를 지정하기 위해 임의의 수의 선행 0을 추가하는 Generic 함수입니다.

function add_zero(your_number, length) {
    var num = '' + your_number;
    while (num.length < length) {
        num = '0' + num;
    }
    return num;
}

호프, 이 도움말:

Number.prototype.zeroFill= function (n) {
    var isNegative = this < 0;
    var number = isNegative ? -1 * this : this;
    for (var i = number.toString().length; i < n; i++) {
        number = '0' + number;
    }
    return (isNegative ? '-' : '') + number;
}

저는 지루해서 JSPerf를 놀면서 현재 선택된 답에 0을 더해서 무엇을 사용하든 이기려고 노력했습니다.slice(-2)영리한 접근이지만 줄이 길어질수록 성능이 훨씬 더 나빠집니다.

0부터 10까지의 숫자(1문자열과 2문자열)의 경우 약 10% 정도 차이가 날 수 있었고, 사용하여 더 긴 문자열을 다룰 때 가장 빠른 접근 방식이 훨씬 더 좋았습니다.charAt그래서 끈 전체를 가로지를 필요가 없습니다.

이 팔로우는 그렇게 간단하지 않습니다.slice(-2)그러나 대부분 3자리 숫자(3문자열)에서 사용할 경우 86%~89% 더 빠릅니다.

var prepended = ( 1 === string.length && string.charAt( 0 ) !== "0" ) ? '0' + string : string;
$('#detect').html( toGeo(apX, screenX)  + latT +', '+ toGeo(apY, screenY) + lonT  );

function toGeo(d, max) {
   var c = '';

   var r = d/max * 180;
   var deg = Math.floor(r);
   if(deg < 10) deg = '0' + deg;
   c += deg + "° ";

   r = (r - deg) * 60;
   var min = Math.floor(r);
   if(min < 10) min = '0' + min;
   c += min + "′ ";

   r = (r - min) * 60;
   var sec = Math.floor(r);
   if(sec < 10) sec = '0' + sec;
   c += sec + "″";

   return c;
}

하나의 정규식 바꾸기를 수행하면 다음과 같습니다.

var stringWithSmallIntegers = "4° 7′ 34″W, 168° 1′ 23″N";

var paddedString = stringWithSmallIntegers.replace(
    /\d+/g,
    function pad(digits) {
        return digits.length === 1 ? '0' + digits : digits;
    });

alert(paddedString);

예상 출력을 보여줍니다.

언급URL : https://stackoverflow.com/questions/8513032/less-than-10-add-0-to-number

반응형