Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/306.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/python-2.7/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在Python中打印负零_Python_Python 2.7 - Fatal编程技术网

如何在Python中打印负零

如何在Python中打印负零,python,python-2.7,Python,Python 2.7,我正在将十进制度数转换为DMS打印。转换算法是您所期望的,使用modf,加上符号从MS部分中取出,只保留在D部分中 除了度数为负0,-0的情况外,一切都很好。例如-0.391612,应打印为-0°23'29” “%d”删除负号。我可以使用什么格式的字符串打印-0 我用一个乱七八糟的方法解决了这个问题,它将数字转换成字符串,如果是负数,则在前面加上“-”,然后使用“%s”作为格式。这很尴尬,感觉很不雅观 代码如下: def dec_to_DMS(decimal_deg): deg = modf

我正在将十进制度数转换为DMS打印。转换算法是您所期望的,使用modf,加上符号从MS部分中取出,只保留在D部分中

除了度数为负0,-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"
def dec到dem(十进制):
deg=modf(十进制度)[1]
deg_=fabs(modf(十进制度)[0])
最小值=modf(摄氏60度)[1]
最小值=modf(度=60)[0]
sec=modf(最小值60)[1]
返回度,最小值,秒
def print_DMS(DMS):#DMS是一个元组
#确保为-0.xxx打印“-”
格式=(“-”如果copysign(1,dms[0])<0 else”“)+%d°%02d“%02d”
返回格式%dms
打印打印(12月至12月(-0.391612))
>>> -0°23'29"
deg
用于防止函数返回(-0,-23,-29);它返回正确的(-0,23,29)。

使用
format()


您必须将度数打印为浮点值,而不是整数,因为2个补码整数(在大多数平台上使用)没有负零。
%d
用于格式化整数

print u'{:.0f}°{:.0f}\'{:.0f}\"'.format(deg, fabs(min), fabs(sec)).encode('utf-8')
deg
min
sec
都是浮点数,
fabs
调用都在那里,因此不会打印相应的符号

或者使用旧格式字符串样式:

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

请给出问题的最小示例代码。+1因为使用
modf
会使整个过程变得非常优雅,为什么不直接使用
%g
而不是
%.0f
?因为
%g
可能会根据传递的值选择使用指数格式变量,在这种情况下会导致
-0°2e+01'3e+01”
(在我的平台上)这绝对不是您想要的
%f
确保使用非指数格式。太糟糕了,这么多教程/指南网站仍然提倡使用旧的
%
符号,而不是
格式。这是一个很好的例子,说明了为什么切换很重要。好的@格尼布勒:谢谢,那就对了。请注意,元组需要用
*
展开,因为format()希望参数的数量与格式字符串中的{}数量相同:
''{:g}°{:02.0f}'{:02.0f}''''。format(*dms)
print (u'%.0f°%.0f\'%.0f\"' % (deg, fabs(min), fabs(sec))).encode('utf-8')