【发布时间】:2015-06-20 02:09:27
【问题描述】:
我正在寻找一种优雅的方式来漂亮地打印具有最合适前缀的物理量(如12300 grams 是12.3 kilograms)。一个简单的方法如下所示:
def pprint_units(v, unit_str, num_fmt="{:.3f}"):
""" Pretty printer for physical quantities """
# prefixes and power:
u_pres = [(-9, u'n'), (-6, u'µ'), (-3, u'm'), (0, ''),
(+3, u'k'), (+6, u'M'), (+9, u'G')]
if v == 0:
return num_fmt.format(v) + " " + unit_str
p = np.log10(1.0*abs(v))
p_diffs = np.array([(p - u_p[0]) for u_p in u_pres])
idx = np.argmin(p_diffs * (1+np.sign(p_diffs))) - 1
u_p = u_pres[idx if idx >= 0 else 0]
return num_fmt.format(v / 10.**u_p[0]) + " " + u_p[1] + unit_str
for v in [12e-6, 3.4, .123, 3452]:
print(pprint_units(v, 'g', "{: 7.2f}"))
# Prints:
# 12.00 µg
# 3.40 g
# 123.00 mg
# 3.45 kg
查看units 和Pint,我找不到那个功能。是否还有其他库可以更全面地排版 SI 单位(以处理角度、温度等特殊情况)?
【问题讨论】:
-
以下数量的预期表示形式:
a=4.0a = a / 3.0print(pprint_units(a, 'g', "{: 7.2f}"))?我无法在不知情的情况下给出答案。 -
@Serge:
pprint_units(4./3, 'g', "{: 7.2f}")应该导致' 1.33 g'。
标签: python units-of-measurement