我正在尝试转换如下字符串:
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
。
答案 0 :(得分:3)
您可以维护一个词典,并使用该词典查找乘以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)
convert_numeric_abbr('1m')
# 1000000.0
convert_numeric_abbr('1.4m')
# 1400000.0
convert_numeric_abbr('1k')
# 1000.0
convert_numeric_abbr('1.4k')
# 1400.0
答案 1 :(得分:1)
尽管eval
is evil,您可以将其用作概念证明:
def tonum(s):
return eval(s.replace('k', '*1e3').replace('m', '*1e6'))
作为奖励,这还将正确计算表达式,例如:
tonum("140k + 1m")