1. ホーム
  2. javascript

[解決済み] 10未満は0を足す[重複]。

2022-09-23 02:51:29

質問

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秒、北緯168度01分23秒

お疲れ様でした。

どのように解決するのですか?

いつでもできること

('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 よりも大きくはできないことに注意してください。これはもちろん技術的な解決策を与えることができますが、私はこのような単純な関数に複雑さを持ち込みたくなかったのです。(もしあなたがそうしたいのなら alex の回答 をご覧ください)。

を書くことができないことにも注意してください。 2.pad() . 変数でしか使えないのです。しかし、その場合、変数でなければ、その数字が何桁で構成されているかは、常に事前に分かっていることになります。