我正在寻找一种优雅的方式来美化物理量,并使用最合适的前缀(例如将12300克
转换为12.3千克
)。一个简单的实现方法如下:
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.0
a = a / 3.0
print(pprint_units(a, 'g', "{: 7.2f}"))
。如果不知道,我无法给出答案。 - Serge Ballestapprint_units(4./3, 'g', "{: 7.2f}")
应该输出' 1.33 g'
。 - Dietrich