小于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

谢谢你抽出时间

211596 次浏览

你随时都可以

('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 的回答以获得更好的方法)。

还要注意,您将无法编写 2.pad()。它只适用于变量。但是,如果它不是一个变量,那么您总是可以事先知道这个数字由多少位组成。

$('#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 numberFormat = function(number, width) {
return new Array(+width + 1 - (number + '').length).join('0') + number;
}

JsFiddle .

这样,处理任意宽度都不成问题。

创建一个可以重用的函数:

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

然后在坐标的每个部分使用它:

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

诸如此类。

我感到很无聊,于是就围着 JSPerf 转,试图用 slice(-2)来打败当前选择的答案。这是一种聪明的方法,但是随着字符串变长,性能会变差。

对于0到10的数字(一个和两个字符串) ,我能够跳过大约10% ,最快的方法在处理较长的字符串时使用 charAt要好得多,因此它不必遍历整个字符串。

下面这句话并不像 slice(-2)那样简单,而是在使用大多数3位数字(3个字符串)时使用的 快了86% -89%

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

霍普,这个有用:

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

一个正则表达式替换就可以了:

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

显示预期产出。

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

或:

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

你随时都可以

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

下面是一个通用函数,用于添加任意数量的前导零,用于生成任意大小的数字字符串。

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