如何使用python将SI单位转换为数字

问题描述 投票:0回答:3

我想转换字母附带的数字,并根据每个字母指定的值进行转换。就像数字 1M 应读取为 1000000,数字 1K 应读取为 1000。有一些简单的方法可以完成此操作吗?

python numbers integer
3个回答
2
投票

一个简单的方法是使用字典来存储每次转换将使用的零的数量:

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

此解决方案可能会或可能不会扩展,具体取决于项目的规模和复杂性。


1
投票

将最后一个字符转换为一个值,例如M -> 1000000,k -> 1000。 乘以该值并添加一些代码以应对可能的解析错误。

(这里故意不加代码,让大家试试)。


1
投票

您可以使用 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)
© www.soinside.com 2019 - 2024. All rights reserved.