使用公制前缀格式化数字(SI样式)

2024-03-29 11:25:58 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在寻找一个现有的解决方案,将一个带有公制前缀(SI样式)的数字转换为float或int

另外,带有公制前缀的初始数字是一个字符串

示例:

我有:

a = "1u"
b = "2m"
c = "1.1u"

我想要:

^{pr2}$

Tags: 字符串示例样式数字解决方案floatint公制
2条回答

您可以使用前缀词典:

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))

结果:

^{pr2}$

使用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

Quantity子类float,因此可以在任何可以使用float的地方使用Quantity。在

^{pr2}$

打印时可以保留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

它还提供了更多的功能。在

相关问题 更多 >