有一些用于 Python 的通用单元处理模块,它们可以包装在模板标签中(没有特定顺序):
也许其中之一可以为您提供所需的东西。但我仍然坚持我之前的评论,如果你只需要这么少的功能,你不应该费心重新发明轮子(或你的一小部分)。
仔细查看您的代码后,我发现了一些不一致之处:
- 1.99999 返回为 1m(应该是 2m)
- 我假设您想保留两位有效数字,但 1.2 返回为 1m 或 0.12 作为 0m
- 最后一行需要在值元组周围加上括号
这是您的函数的更一致和简洁的版本(加上一些环绕测试):
from math import modf
def old_dist_format(distance):
if distance < 100:
return '%dm' % distance
elif distance < 1000:
return '%.0fm' % round(distance, -1)
else:
m, km = modf(distance / 1000.0)
if m < 0.01:
return '%.0fkm' % km
else:
return '%.1fkm' % (km + round(m, 1))
def dist_format(distance):
rounded = float('%.2g' % distance)
km = modf(rounded / 1000.0)
if km[1]:
return "%gkm" % (km[0] + km[1])
else:
return "%gm" % rounded
if __name__ == "__main__":
while True:
try:
s = raw_input("> ")
try:
d = float(s)
except ValueError:
print "Enter number"
continue
print "%s\t%s" % (dist_format(d), old_dist_format(d))
except KeyboardInterrupt:
print
break
新函数的第一行dist_format()
始终保留两位有效数字。如果不需要,%g 会忽略小数点后的所有内容。警告:我的函数将为您提供(天文)距离 >= 1000000000 的指数符号。