このコードを変更して、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;
}
したがって、outpoutは
4°7 '34''W、168°1' 23''N
に
04°07 ′34″ W、168°01′ 23″ N
御時間ありがとうございます
いつでもできる
_('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()
を書くことができないことにも注意してください。変数でのみ機能します。ただし、変数でない場合は、数値が何桁で構成されているかを常に事前に知ることができます。
再利用できる関数を作成します。
function minTwoDigits(n) {
return (n < 10 ? '0' : '') + n;
}
次に、座標の各部分で使用します。
c += minTwoDigits(deg) + "° ";
等々。
これを行う汎用関数を作成できます...
var numberFormat = function(number, width) {
return new Array(+width + 1 - (number + '').length).join('0') + number;
}
jsFiddle 。
そうすれば、任意の幅を処理することは問題になりません。
いつでもできる
('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のままにすることができます。
if(myNumber.toString().length < 2)
myNumber= "0"+myNumber;
または:
return (myNumber.toString().length < 2) ? "0"+myNumber : myNumber;
希望、このヘルプ:
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;
}
私は退屈で、現在選択されている答えを打ち負かそうとするJSPerfをいじくり回し、slice(-2)
を使用してゼロを先頭に追加しました。これは賢いアプローチですが、文字列が長くなるとパフォーマンスが大幅に低下します。
数字が0から10(1つまたは2つの文字列)の場合、約10%ビートすることができました。また、charAt
を使用して長い文字列を処理する場合、文字列全体をトラバースする必要がないため、最速のアプローチがはるかに優れていました。
このフォローはslice(-2)
ほど簡単ではありませんが、ほとんど3桁の数字(3文字の文字列)で使用する場合は 86%-89%高速 です。
var prepended = ( 1 === string.length && string.charAt( 0 ) !== "0" ) ? '0' + string : string;
$('#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;
}
これは、任意のサイズの数値文字列を作成するために任意の数の先行ゼロを追加する汎用関数です。
function add_zero(your_number, length) {
var num = '' + your_number;
while (num.length < length) {
num = '0' + num;
}
return num;
}
単一の正規表現の置換でそれを行う必要があります。
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);
予想される出力を示します。