DMS として印刷するために 10 進度を変換しています。変換アルゴリズムは、modf を使用して期待されるものであり、符号が MS 部分から取り除かれ、D 部分だけに残されます。
Degree が負のゼロ、-0 の場合を除いて、すべて問題ありません。例は -0.391612 で、-0°23'29" として出力されます。
"%d" はマイナス記号を削除します。-0 を出力するために使用できるフォーマット文字列は何ですか?
数値を文字列に変換し、負の場合は「-」を先頭に追加し、「%s」を形式として使用するクラッジで回避しました。それはぎこちなく、優雅ではないと感じます。
コードは次のとおりです。
def dec_to_DMS(decimal_deg):
deg = modf(decimal_deg)[1]
deg_ = fabs(modf(decimal_deg)[0])
min = modf(deg_ * 60)[1]
min_ = modf(deg_ * 60)[0]
sec = modf(min_ * 60)[1]
return deg,min,sec
def print_DMS(dms): # dms is a tuple
# make sure the "-" is printed for -0.xxx
format = ("-" if copysign(1,dms[0]) < 0 else "") + "%d°%02d'%02d\""
return format % dms
print print_DMS(dec_to_DMS(-0.391612))
>>> -0°23'29"
deg_
関数が (-0,-23,-29) を返さないようにするためです。正しい (-0,23,29) を返します。