Подтвердить что ты не робот

Менее 10 добавить 0 к числу

Как я могу изменить этот код, чтобы добавить 0 перед любыми цифрами ниже 10

$('#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 "Вт, 168 ° 1' 23" N

к

04 ° 07 '34 "Вт, 168 ° 01' 23" N

Спасибо за ваше время

4b9b3361

Ответ 1

Вы всегда можете сделать

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

См. slice():

Вы также можете использовать отрицательные числа для выбора из конца массива

Следовательно

('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"

Обратите внимание на очевидный недостаток, заключающийся в том, что значение n не может быть выше 11, так как строка 0 в настоящее время имеет длину всего 10 символов. Конечно, это могло бы дать техническое решение, но я не хотел вводить сложность в такую ​​простую функцию. (Если вы решите, см. alex answer для отличного подхода к этому).

Обратите внимание, что вы не сможете написать 2.pad(). Он работает только с переменными. Но тогда, если это не переменная, вы всегда будете знать заранее, сколько цифр состоит из числа.

Ответ 2

Сделайте функцию, которую вы можете повторно использовать:

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

Затем используйте его в каждой части координат:

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

и т.д.

Ответ 3

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

или

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

Ответ 4

Вы можете написать общую функцию, чтобы сделать это...

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

jsFiddle.

Таким образом, это не проблема для любой произвольной ширины.

Ответ 5

Мне было скучно и играли вокруг JSPerf, пытаясь победить выбранный ответ, добавив нуль, независимо от того, что и используя slice(-2). Это умный подход, но производительность становится намного хуже, поскольку строка становится длиннее.

Для чисел от нуля до десяти (одна и две строки символов) я смог победить примерно на десять процентов, а самый быстрый подход был намного лучше при работе с более длинными строками с помощью charAt, поэтому ему не нужно проходить целую строку.

Это не так просто, как slice(-2), но на 86% -89% быстрее при использовании в основном 3-значных числах (3 символьные строки).

var prepended = ( 1 === string.length && string.charAt( 0 ) !== "0" ) ? '0' + string : string;

Ответ 6

Надеюсь, эта помощь:

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;
}

Ответ 7

$('#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;
}

Ответ 8

Единственное регулярное выражение replace должно сделать это:

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);

показывает ожидаемый результат.

Ответ 9

Вы всегда можете сделать

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

Если вы используете его очень часто, вы можете расширить объект Number

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

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

deg.pad(4) // "0045"

где вы можете установить любой размер пэда или оставить значение по умолчанию 2.