蟒蛇"ValueError: could not convert string to float: %"



我有一组指令:

创建一个名为format_change的函数,该函数使用Change列中的字符串,并执行以下操作:

  • 如果最后一个字符是%符号,请将其删除
  • 将字符串转换为浮点
  • 如果这个浮点数是正的,就乘以100
  • 返回结果浮动

这是我的代码:

def format_change(string):
if string[-1] == "%":
string = string[-1]
str_as_float = float(string)
if str_as_float > 0:
str_as_float = str_as_float * 100
return str_as_float

然而,当我进入功能时

format_change(0.45%)

它返回输出:

ValueError:无法将字符串转换为浮点值:"%">

如何正确转换?

您将字符串'%'分配给您的变量,但您想要除该字符之外的所有内容。将函数的开头更改为:

def format_change(string):
if string[-1] == "%":
string = string[:-1]  # added ':'

试试这个:

def format_change(string):
if string[-1] == "%":
string = string[:-1]

str_as_float = float(string)
if str_as_float > 0:
str_as_float = str_as_float * 100
return str_as_float

print(format_change('0.45%'))

如果你正在寻找一个单行,你可以使用这个:

def format_change(string):
return float(string.replace('%',''))*100 if float(string.replace('%',''))>0 else float(string.replace('%',''))
format_change("-50%")
# -50.0
format_change("50%")
# 5000.0

试试这个:

解决方案1

def format_change(string):
if string.endswith("%"):
string = string[0:-1]
str_as_float = float(string)
if str_as_float > 0:
str_as_float = str_as_float * 100
return str_as_float
print(format_change('-0.45%'))

解决方案2

def format_change(string):
if string.endswith('%'):
return abs(float(string[0:-1]))*100
print(format_change('-0.45%'))

解决方案3

def format_change(string):
return abs(float(string.split('%')[0]))*100
print(format_change('-0.45%')

输出

45.0

最新更新