Konwertuję dziesiętne stopnie, aby drukować jako DMS. Algorytm konwersji jest tym, czego można się spodziewać, używając modf, z dodatkiem, że znak jest wyjęty z części MS i pozostawiony tylko dla części D.Jak drukować ujemne zero w Pythonie
Wszystko jest w porządku, z wyjątkiem przypadku, gdy stopień jest ujemny zero, -0. Przykładem jest -0,391612 który powinien wydrukować jako -0 ° 23'29" .
«% d» upuszcza znak ujemny. Co format string można użyć do drukowania
-0? Mam obejść . to z kludge który konwertuje numery do strun i poprzedza a „-” jeśli ujemna, wtedy używa „% s” jako format jest to niewygodne i czuje nieeleganckie
Oto kod:
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_
zapobiega powrotowi funkcji (-0, -23, -29), zwraca poprawną (- 0,23,29).
Proszę pokazać minimalną przykładowy kod dla tego problemu. – languitar
+1, ponieważ użycie 'modf' powinno sprawić, że całość będzie całkiem elegancka –