Pythonで10進度を度分秒に変換するにはどうすればよいですか? Formulaはすでに書かれていますか?
質問する
40027 次
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 に答える