我正在寻找一个现有的解决方案,用于将带有指标前缀(SI样式)的数字转换为float或int。
此外,带有指标前缀的初始号码是字符串。
示例:
我有:
a = "1u"
b = "2m"
c = "1.1u"
我想:
a = 0.000001
b = 0.002
c = 0.0000011
答案 0 :(得分:2)
使用QuantiPhy软件包。它是一个稳定的,有据可查且得到良好支持的软件包,旨在满足您的需要。
>>> from quantiphy import Quantity
>>> all = dict(
... a = Quantity('1u'),
... b = Quantity('2m'),
... c = Quantity('1.1u)'
... )
>>> for n, v in all.items():
... print(f'{n} = {v:<0.7f}')
a = 0.000001
b = 0.002
c = 0.0000011
数量子类是浮点数,因此可以在可以使用浮点数的任何地方使用数量。
>>> print(sum(all.values()))
0.0020021
在打印时,您可以保留SI比例因子。您还可以添加单位以使数量更具描述性。
>>> all = dict(
... a = Quantity('1ug'),
... b = Quantity('2mg'),
... c = Quantity('1.1ug)'
... )
>>> for n, v in all.items():
... print(f'{n} = {v}')
a = 1 ug
b = 2 mg
c = 1.1 ug
它还提供了更多功能。
答案 1 :(得分:1)
您可以使用备前词典:
prefix = {"y":1e-24, "z":1e-21, "a":1e-18, "f":1e-15, "p": 1e-12,
"n":1e-9, "u":1e-6, "µ":1e-6, "m":1e-3, "c":1e-2, "d":0.1,
"h":100, "k":1000, "M":1e6, "G":1e9, "T":1e12, "P":1e15,
"E":1e18, "Z":1e21, "Y":1e14}
def meter(s):
try:
# multiply with meter-prefix value
return float(s[:-1])*prefix[s[-1]]
except KeyError:
# no or unknown meter-prefix
return float(s)
for a in ["1u", "2m", "1.1u", "42", "6k"]:
print(meter(a))
结果:
1e-06
0.002
1.1e-06
42.0
6000.0