Python 将带有财务缩写的数字字符串转换为float
我试图转换字符串,如:Python 将带有财务缩写的数字字符串转换为float,python,string,Python,String,我试图转换字符串,如: s = '1m' s = '1.4m' s = '1k' s = '1.4k' 它们的实际整数是多少(例如'1k'到1000) 我想要一个可以调用的函数: print(tonum('1m')) print(tonum('1.4m')) print(tonum('1.45m')) print(tonum('1k')) print(tonum('1.4k')) print(tonum('1.45k')) 输出: 1000000 1400000 1450000 1000 1
s = '1m'
s = '1.4m'
s = '1k'
s = '1.4k'
它们的实际整数是多少(例如'1k'
到1000
)
我想要一个可以调用的函数:
print(tonum('1m'))
print(tonum('1.4m'))
print(tonum('1.45m'))
print(tonum('1k'))
print(tonum('1.4k'))
print(tonum('1.45k'))
输出:
1000000
1400000
1450000
1000
1400
1450
我试过:
def tonum(s):
if '.' in s:
return int(s.replace('.', '').replace('m', '00000').replace('k', '00'))
else:
return int(s.replace('m', '000000').replace('k', '000'))
但它只适用于
1.4k
1k
1.4m
1m
,而不适用于1.45m
您可以维护一个字典,并使用它查找10的右幂乘以
def convert_numeric_abbr(s):
mapping = {'k': 1000, 'm': 1000000, 'b': 1000000000}
# Do a check first so it doesn't choke on valid floats
if s[-1].isalpha():
return float(s[:-1]) * mapping[s[-1].lower()]
return float(s)
尽管如此,您可以将其用作概念证明:
def tonum(s):
return eval(s.replace('k', '*1e3').replace('m', '*1e6'))
作为奖励,这还将正确计算表达式,例如:
tonum("140k + 1m")
不错的答案,但是感冒的答案,因为它没有
eval
:PVery Nice,只是一个注释,在Python3中我们也可以写:'b':1_000_000
(PEP515)
tonum("140k + 1m")