Javascript 小于10将0添加到数字

Javascript 小于10将0添加到数字,javascript,jquery,math,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;

如何修改此代码以在任何低于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〃西,168°1′23〃北

04°07′34〃西,168°01′23〃北

感谢您抽出时间

您随时都可以

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

也可以使用负数从数组末尾进行选择

因此

为了便于访问,您当然可以将其提取到函数中,甚至可以使用它扩展数字:

这将允许您编写:

c += deg.pad() + '° '; // "04° "
上面的函数板接受指定所需字符串长度的参数。如果未使用此类参数,则默认为2。你可以写:

deg.pad(4) // "0045"
请注意一个明显的缺点,即n的值不能大于11,因为0的字符串目前只有10个字符长。这当然可以提供一个技术解决方案,但我不想在这样一个简单的函数中引入复杂性。如果你选择这样做,看看有没有一个很好的方法


还请注意,您将无法写入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;
}


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

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

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

诸如此类。

我很无聊,一直在玩JSPerf,试图击败当前选择的答案,不管是什么,都要预先输入一个零,并使用slice-2。这是一种聪明的方法,但随着字符串变长,性能会变得更差

对于数字0到10个一个和两个字符串,我能够比它们快10%,而使用charAt处理较长字符串时,最快的方法要好得多,因此它不必遍历整个字符串

这个follow并不像slice-2那么简单,而是在主要用于3位数字和3个字符串时使用

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;
或:

你总能做到

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

这里有一个Genaric函数,用于添加任意数量的前导零,以生成任意大小的数字字符串

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

你可以写2..pad:这将切断前导数字。例如:deg.pad2;将999转换为99。这在“0”+123上不起作用。slice-2也不会为负数添加前导零`0${deg}`。切片-2;杜普:,还有许多其他人。说真的,如果你只是在处理两个数字,这就是解决问题的方法;简短、简单、有效、易读。如果你需要考虑零填充更长的数字,那么使用其他解决方案之一,但如果你只做两位数,那么这就是你所需要的。这也比@editor的解决方案快30%左右。我先把这个解决方案放在台上,然后意识到Guffa已经在那里了。这是最好的答案。为我节省了一吨+1的时间来实现一个彻底、全面的零填充函数,但为什么不直接调用它呢?零填充?尽管说实话,我认为对于问题中的两位数来说,这可能有点过头了。:-从全局考虑。谁知道呢,也许将来它对其他任务会有帮助!事实上,这就是+1的原因。但同时也要务实地思考,以最少的努力解决手头的任务。事实上,@Guffa的解决方案比charAt的解决方案快30%左右。通过使用一个数字检查和一个三元运算符,只有一个字符串转换,没有字符查询。目前,顶级解决方案是@David Hedlund编写的,但我测试了它,它有一个bug。我向他提交了我的修正案,但他没有接受审查。这是他发布的解决方案的修复方案。它不适用于负数
return (myNumber.toString().length < 2) ? "0"+myNumber : myNumber;
('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"
function add_zero(your_number, length) {
    var num = '' + your_number;
    while (num.length < length) {
        num = '0' + num;
    }
    return num;
}