小于10加0到数字

时间:2011-12-14 23:05:45

标签: javascript jquery math

如何修改此代码,以便在任何低于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

感谢您的时间

10 个答案:

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

jsFiddle

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

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