我可以通过几种方式将%
转换为十进制,例如使用正则表达式提取int部分并除以100
或将'%'
拆分为int()
部分。但我想知道是否有更多的pythonic方法来做到这一点?
答案 0 :(得分:3)
右键剥离百分比,解析为浮点数,然后除以100:
float(your_string.rstrip('%')) / 100.0
这将允许多个%
,这可能是也可能不是好事。如果你知道最后一个字符总是是%
,你可以只切片:
float(your_string[:-1]) / 100.0
答案 1 :(得分:0)
该数字应该带有一个(且只有一个)%-sign,并且在字符串的末尾:
def perc2num(p):
p = p.strip() # get rid of whitespace after the %
if p.endswith('%') and p.count('%') == 1:
return float(p[:-1])
else:
raise ValueError('Not a percentage.')
float()
转换将删除数字和%之间的空格。
测试:
In [11]: perc2num('3.5%')
Out[11]: 3.5
In [12]: perc2num('-0.2')
---------------------------------------------------------------------------
ValueError Traceback (most recent call last)
<ipython-input-12-9a6733e653ff> in <module>()
----> 1 perc2num('-0.2')
<ipython-input-10-44f49dc456d1> in perc2num(p)
3 return float(p[:-1])
4 else:
----> 5 raise ValueError('Not a percentage.')
ValueError: Not a percentage.
In [13]: perc2num('-7%')
Out[13]: -7.0
In [15]: perc2num(' 23%')
Out[15]: 23.0
In [16]: perc2num(' 14.5 %')
Out[16]: 14.5
In [17]: perc2num(' -21.8 % ')
Out[17]: -21.8