如何修改此代码,以便在任何低于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 :(得分:157)
你可以随时
('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's answer以获得一个很好的方法)。
另请注意,您将无法撰写2.pad()
。它只适用于变量。但是,如果它不是变量,您将始终事先知道该数字包含多少位数。
答案 1 :(得分:34)
制作一个可以重复使用的功能:
function minTwoDigits(n) {
return (n < 10 ? '0' : '') + n;
}
然后在坐标的每个部分使用它:
c += minTwoDigits(deg) + "° ";
等等。
答案 2 :(得分:4)
你可以随时
('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。
答案 3 :(得分:3)
您可以编写一个通用函数来执行此操作...
var numberFormat = function(number, width) {
return new Array(+width + 1 - (number + '').length).join('0') + number;
}
这样,处理任意宽度都不是问题。
答案 4 :(得分:3)
if(myNumber.toString().length < 2)
myNumber= "0"+myNumber;
或:
return (myNumber.toString().length < 2) ? "0"+myNumber : myNumber;
答案 5 :(得分:1)
我很无聊并且玩JSPerf试图击败当前选择的答案,无论如何都使用slice(-2)
。这是一个聪明的方法,但随着字符串变长,性能会变差。
对于数字0到10(一个和两个字符串),我能够击败大约百分之十,并且使用charAt
处理更长的字符串时,最快的方法要好得多,所以它没有遍历整个字符串。
以下内容并不像slice(-2)
那样简单,但在大多数3位数字(3个字符串)中使用时,86%-89% faster就是{。}}。
var prepended = ( 1 === string.length && string.charAt( 0 ) !== "0" ) ? '0' + string : string;
答案 6 :(得分:1)
希望,这个帮助:
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 :(得分: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);
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 :(得分:0)
单个正则表达式替换应该这样做:
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)
这是Genaric函数,用于添加任意数量的前导零以生成任何大小的数字字符串。
function add_zero(your_number, length) {
var num = '' + your_number;
while (num.length < length) {
num = '0' + num;
}
return num;
}