Tôi đang tìm kiếm một cách thanh lịch để in số lượng vật lý với tiền tố thích hợp nhất (như trong 12300 grams
là 12.3 kilograms
). Một phương pháp đơn giản như sau:Số lượng vật lý in ấn với tỷ lệ tự động của tiền tố SI
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
Nhìn qua units và Pint, tôi không thể tìm thấy chức năng đó. Có bất kỳ thư viện nào khác sắp xếp đơn vị SI toàn diện hơn không (để xử lý các trường hợp đặc biệt như góc độ, nhiệt độ, v.v ...)?
gì nên được dự kiến đại diện cho sau lượng: 'a = 4.0' 'a = a/3.0'' in (pprint_units (a,' g ', "{: 7.2f}")) '? Tôi không thể đưa ra câu trả lời mà không biết điều đó. –
@Serge: '' pprint_units (4./3, 'g', "{: 7.2f}") '' sẽ dẫn đến '' '1,33 g'''. – Dietrich