Менее 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
Спасибо за ваше время
Ответы
Ответ 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.