it-swarm.com.de

weniger als 10 Nummer hinzufügen

Wie kann ich diesen Code so ändern, dass eine 0 vor einer Ziffer unter 10 hinzugefügt wird?

$('#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;
}

Der Outpout würde sich also ändern 

4 ° 7 '34' 'W, 168 ° 1' 23 '' N 

zu

04 ° 07 '34' W, 168 ° 01 '23' N 

Vielen Dank für Ihre Zeit

44
uriah

Das kannst du immer tun 

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

Siehe slice() :

Sie können auch negative Zahlen verwenden, um am Ende eines Arrays auszuwählen

Daher

('0' + 11).slice(-2) // '11'
('0' + 4).slice(-2)  // '04'

Um den Zugriff zu erleichtern, können Sie es natürlich in eine Funktion extrahieren oder sogar Number damit erweitern:

Number.prototype.pad = function(n) {
    return new Array(n).join('0').slice((n || 2) * -1) + this;
}

Damit können Sie schreiben:

c += deg.pad() + '° '; // "04° "

Die obige Funktion pad akzeptiert ein Argument, das die Länge der gewünschten Zeichenfolge angibt. Wenn kein solches Argument verwendet wird, wird standardmäßig 2 verwendet. Sie könnten Folgendes schreiben:

deg.pad(4) // "0045"

Beachten Sie den offensichtlichen Nachteil, dass der Wert von n nicht höher als 11 sein darf, da die Zeichenfolge der Nullen gerade zehn Zeichen lang ist. Dies könnte natürlich eine technische Lösung sein, aber ich wollte keine Komplexität in eine so einfache Funktion einführen. (Sollten Sie sich dazu entscheiden, sehen Sie die Antwort von alex für eine exzellente Herangehensweise daran).

Beachten Sie auch, dass Sie 2.pad() nicht schreiben können. Es funktioniert nur mit Variablen. Wenn es sich jedoch nicht um eine Variable handelt, wissen Sie immer vorher, aus wie vielen Ziffern die Zahl besteht.

137
David Hedlund

Erstellen Sie eine Funktion, die Sie wiederverwenden können:

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

Dann verwenden Sie es in jedem Teil der Koordinaten:

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

und so weiter.

32
Guffa

Das kannst du immer tun

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

Wenn Sie es sehr häufig verwenden, können Sie die Objektnummer erweitern

Number.prototype.pad = function(n) {
    if (n==undefined)
        n = 2;

    return (new Array(n).join('0') + this).slice(-n);
}

deg.pad(4) // "0045"

hier können Sie eine beliebige Pad-Größe einstellen oder die Standardeinstellung beibehalten. 2.

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

oder:

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

Sie können dazu eine generische Funktion schreiben ...

var numberFormat = function(number, width) {
    return new Array(+width + 1 - (number + '').length).join('0') + number;
}

jsFiddle .

Auf diese Weise ist es kein Problem, mit beliebiger Breite umzugehen.

2
alex

Ich hoffe das hilft:

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

Ich war gelangweilt und spielte um JSPerf herum und versuchte, die aktuell ausgewählte Antwort zu schlagen, wobei eine Null vorangestellt wurde, egal was und mit slice(-2). Es ist ein kluger Ansatz, aber die Leistung wird umso schlechter, je länger die Saite wird.

Bei Zahlen von null bis zehn (ein und zwei Zeichenfolgen) konnte ich um etwa zehn Prozent schlagen. Der schnellste Ansatz war bei längeren Zeichenfolgen mit charAt viel besser, sodass er nicht die gesamte Zeichenfolge durchlaufen muss.

Diese Folge ist nicht so einfach zu beenden wie slice(-2), ist aber 86% -89% schneller , wenn sie hauptsächlich in 3-stelligen Zahlen (3 Zeichenketten) verwendet wird.

var prepended = ( 1 === string.length && string.charAt( 0 ) !== "0" ) ? '0' + string : string;
1
buley
$('#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;
}
0
Krzysztof Trzos

Hier ist die generische Funktion zum Hinzufügen einer beliebigen Anzahl führender Nullen, um eine beliebige numerische Zeichenfolge zu erstellen. 

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

Ein einzelner regulärer Ausdruck sollte es tun:

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

zeigt die erwartete Ausgabe.

0
Mike Samuel