9

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) を返します。

4

2 に答える 2

17

使用するformat()

>>> format(-0.0)
'-0.0'
>>> format(0.0)
'0.0'


>>> print '''{: g}°{}'{}"'''.format(-0.0, 23, 29)
-0°23'29"
于 2013-05-24T11:30:40.003 に答える
2

2 の補数の整数 (ほとんどのプラットフォームで使用される) には負のゼロがないため、度数は整数ではなく浮動小数点値として出力する必要があります。%d整数をフォーマットするためのものです。

print u'{:.0f}°{:.0f}\'{:.0f}\"'.format(deg, fabs(min), fabs(sec)).encode('utf-8')

degminおよびsecすべて float でfabsあり、それぞれの記号が出力されないように呼び出しが存在します。

または、古い書式文字列スタイルを使用します。

print (u'%.0f°%.0f\'%.0f\"' % (deg, fabs(min), fabs(sec))).encode('utf-8')
于 2013-05-24T12:08:03.940 に答える