我想转换字母附带的数字,并根据每个字母指定的值进行转换。就像数字 1M 应读取为 1000000,数字 1K 应读取为 1000。有一些简单的方法可以完成此操作吗?
一个简单的方法是使用字典来存储每次转换将使用的零的数量:
>>> si_units = {
... 'K': 3,
... 'M': 6
... }
>>>
>>> var = '5M'
>>> int(var[0]) * (10 ** si_units[var[1]])
5000000
>>> var = '2K'
>>> int(var[0]) * (10 ** si_units[var[1]])
2000
>>>
此解决方案可能会或可能不会扩展,具体取决于项目的规模和复杂性。
将最后一个字符转换为一个值,例如M -> 1000000,k -> 1000。 乘以该值并添加一些代码以应对可能的解析错误。
(这里故意不加代码,让大家试试)。
您可以使用 Prefixed 转换为浮点数。 prefixed.Float 是内置 float 的子类,除了允许使用 SI 和 IEC 前缀进行格式化之外,其他都是相同的。
>>> from prefixed import Float
>>> Float('1M')
Float(1000000.0)
如果你想要一个整数
>>> int(Float('1M'))
1000000
如果要转换回来,只需添加
'h'
作为格式说明符并使用 '.#' 设置精度。
>>> value = Float('1M')
>>> f'{value:.0h}'
'1M'
>>> f'{value:.2h}'
'1.00M'
对于 1K,这不是 SI 表示法,kilo 的前缀是 k,因此您需要将其设为小写。请小心这些,因为 M 是 Mega,m 是 Milli。那里的差别相当大! 此处列出了支持的前缀。
>>> Float('1K'.lower())
Float(1000.0)
如果 K 代表 kibi,则需要添加
'i'
,以便 Prefixed 知道您需要 IEC 前缀,
>>> Float('1Ki')
Float(1024.0)