【问题标题】:Python "ValueError: could not convert string to float: %"Python“ValueError:无法将字符串转换为浮点数:%”
【发布时间】:2021-01-11 17:45:51
【问题描述】:

我有一套说明:

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

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

这是我的代码:

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: 无法将字符串转换为浮点数:'%'

我该怎么做才能正确转换它?

【问题讨论】:

  • 检查切片的工作原理here。您也可以使用str.replace('%','') 删除% 符号。
  • 这是另一个好方法!下次我一定会使用它。会节省我宝贵的时间。非常感谢!

标签: python string function valueerror


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

    试试这个:

    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%'))
    

    【讨论】:

      【解决方案3】:

      试试这个:

      解决方案 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
      

      【讨论】:

        【解决方案4】:

        如果您正在寻找单衬里,您可以使用这个:

        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
        

        【讨论】:

          猜你喜欢
          • 2018-04-23
          • 2015-03-25
          • 2021-12-23
          • 2017-08-12
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2022-01-10
          • 2021-12-22
          相关资源
          最近更新 更多