18

Pythonで10進度を度分秒に変換するにはどうすればよいですか? Formulaはすでに書かれていますか?

4

11 に答える 11

21

これはまさにdivmod次の目的で発明されたものです。

>>> def decdeg2dms(dd):
...   mnt,sec = divmod(dd*3600,60)
...   deg,mnt = divmod(mnt,60)
...   return deg,mnt,sec

>>> dd = 45 + 30.0/60 + 1.0/3600
>>> print dd
45.5002777778
>>> decdeg2dms(dd)
(45.0, 30.0, 1.0)
于 2010-04-05T18:32:02.777 に答える
11

これがPaulMcGuireに基づいた私の更新バージョンです。これはネガを正しく処理する必要があります。

def decdeg2dms(dd):
   is_positive = dd >= 0
   dd = abs(dd)
   minutes,seconds = divmod(dd*3600,60)
   degrees,minutes = divmod(minutes,60)
   degrees = degrees if is_positive else -degrees
   return (degrees,minutes,seconds)
于 2012-04-23T19:07:47.197 に答える
10

負を適切に処理したい場合は、ゼロ以外の最初のメジャーが負に設定されます。度、分、秒のすべてを負として指定することは、一般的な慣行に反しています (ウィキペディアでは、度分表記の有効な例として 40° 26.7717、-79° 56.93172 が示されています。この場合、度は負で、分は符号なしです)。また、度数の部分が 0 の場合、度数を負に設定しても効果はありません。Paul McGuire と baens の関数に基づいて、これを適切に処理する関数を次に示します。

def decdeg2dms(dd):
    negative = dd < 0
    dd = abs(dd)
    minutes,seconds = divmod(dd*3600,60)
    degrees,minutes = divmod(minutes,60)
    if negative:
        if degrees > 0:
            degrees = -degrees
        elif minutes > 0:
            minutes = -minutes
        else:
            seconds = -seconds
    return (degrees,minutes,seconds)
于 2012-10-05T00:27:06.013 に答える
6

ほんの数回の* 60乗算と数回のint切り捨てです。

>>> decdegrees = 31.125
>>> degrees = int(decdegrees)
>>> temp = 60 * (decdegrees - degrees)
>>> minutes = int(temp)
>>> seconds = 60 * (temp - minutes)
>>> print degrees, minutes, seconds
31 7 30.0
>>> 
于 2010-04-05T17:56:02.933 に答える
4

これは私のPythonコードです:

def DecimaltoDMS(Decimal):
    d = int(Decimal)
    m = int((Decimal - d) * 60)
    s = (Decimal - d - m/60) * 3600.00
    z= round(s, 2)
    if d >= 0:
        print ("N ", abs(d), "º ", abs(m), "' ", abs(z), '" ')
    else:
        print ("S ", abs(d), "º ", abs(m), "' ", abs(z), '" ')
于 2015-04-11T09:31:46.550 に答える
2

これは、私の HP Prime と同じように正と負の 10 進度で機能する、わずかに異なるアプローチです...

def dms(deg):
    f,d = math.modf(deg)
    s,m = math.modf(abs(f) * 60)
    return (d,m,s * 60)
于 2020-12-17T16:47:38.353 に答える
0

fmodと丸めを使用して、次数と分数を分離します。分数に 60 を掛けて繰り返し、分と余りを求めます。次に、その最後の部分に再び 60 を掛けて、秒数を取得します。

于 2010-04-05T16:51:27.720 に答える