代码之家  ›  专栏  ›  技术社区  ›  Chaban33

从整数中删除

  •  -3
  • Chaban33  · 技术社区  · 6 年前

    我有一个很大的函数,它导入了一些行,而大多数值行是整数,所以我可以很容易地进行如下划分:

    price_unit_calc = float(inv_row[7]) / float(inv_row[6])
    

    但我有个错误:

    ValueError: invalid literal for float(): 1,000.000
    

    这是因为 inv_row[7] 有时是“1000.000”,而不是1.000.00

    问题是,如果它们连续出现,我如何删除它们?

    更新: 如果我做了

     price_unit_calc = float(inv_row[7].replace(',','.')) / float(inv_row[6].replace(',','.'))
    

    我还是觉得

    File "/home//workspace/odoo-9.0/addons/config/wizard/import_wizard.py", line 39, in do_import
        price_unit_calc = float(inv_row[7].replace(',','.')) / float(inv_row[6].replace(',','.'))
    ValueError: invalid literal for float(): 1.000.000
    

    更新2:

    price_unit_calc = float(inv_row[7].replace(',','')) / float(inv_row[6].replace(',',''))
    

    和错误

    File "/home/antonp/workspace/odoo-9.0/openerp/osv/fields.py", line 362, in _symbol_set_float
        result = __builtin__.float(x or 0.0)
    ValueError: invalid literal for float(): 1,000.000
    
    2 回复  |  直到 6 年前
        1
  •  2
  •   scharette    6 年前

    正如我在评论部分所说 , 是个问题。因此,您需要删除它,因为它只与格式相关(它不会更改实际值)

    inv_row[7].replace(",", "")
    

    而且,如果 inv_row 是一个只包含浮动值的列表,如 1,000.000 ,您应该做的是遍历列表并应用上面的逻辑,而不是在代码中到处查找 可能 导致错误,

    for index,item in enumerate(inv_row):
         inv_row[index] = item.replace(",", "")
    

    现在,为了你的努力,

     inv_row[7].replace(",", ".")
    

    这将导致添加多个 . 字符串表示也会导致错误。

        2
  •  2
  •   blhsing    6 年前

    必须用空字符串替换数字中的逗号:

    price_unit_calc = float(inv_row[7].replace(',','')) / float(inv_row[6].replace(',',''))