将字符串转换为浮动(货币),但有多个小数点

2024-05-23 17:31:40 发布

您现在位置:Python中文网/ 问答频道 /正文

所以我当时在Foot locker网站上做了手脚,现在当我得到价格的时候,我得到了不止一个小数点

我想把它四舍五入到小数点后的两位数,我怎么做

我的价目表:

90.00
170.00
198.00
137.99137.99158.00

当我尝试float函数/方法时,我发现一个错误,请有人帮助我:)

print(float(Price))

90.0
170.0
198.0

ValueError: could not convert string to float: '137.99137.99158.00'

我还想把它四舍五入到两个小数点,所以90.0将变成90.00:)


Tags: 方法函数网站错误价格floatpriceprint
3条回答
  1. 用临时分隔符替换第一个点
  2. 删除所有其他点
  3. 用点替换临时分隔符
  4. 圆的
  5. 用两个小数打印

像这样:

list_prices = [ '90.00', '170.00', '198.00',  '137.99137.99158.00']

def clean_price(price, sep='.'):
    price = str(price)
    price = price.replace(sep, 'DOT', 1)
    price = price.replace(sep, '')
    price = price.replace('DOT', '.')
    rounded = round(float(price),2)
    return f'{rounded:.2f}'

list_prices_clean = [clean_price(price) for price in list_prices]

print(list_prices_clean)

# ['90.09', '170.00', '198.00', '137.99']

编辑:

如果您的意思是在最后一个小数点后四舍五入:

def clean_price(price, sep='.'):
    price = str(price)
    num_seps = price.count(sep)
    price = price.replace(sep, '', num_seps-1)
    rounded = round(float(price),2)
    return f'{rounded:.2f}'

list_prices_clean = [clean_price(price) for price in list_prices]

print(list_prices_clean)

# ['90.00', '170.00', '198.00', '1379913799158.00']

出现该错误是因为输入137.99137.99158.00不是浮点函数的有效输入。我编写了下面的函数来清理输入

def clean_invalid_number(num):
    split_num = num.split('.')
    num_len = len(split_num)
    if len(split_num) > 1:
        temp = split_num[0] + '.'
        for i in range(1,num_len):
            temp += split_num[i]
        return temp
    else:
        return num

为了解释上述内容,我使用了split函数,该函数返回一个列表。如果列表长度大于1,则有超过1个fullstop,这意味着需要清理数据。列表不包含拆分的字符

至于返回2个小数点,只需使用

Price = round(Price,2)

如果您要进行浮动铸造,则返回两个90.00而不是90.0是没有意义的

以下是演示的完整代码:

prices = ['90.00', '170.00', '198.00', '137.99137.99158.00']

prices = [round(float(clean_invalid_number(p)),2 ) for p in prices]

print(prices)

[90.0, 170.0, 198.0, 137.99]


再看一眼你们的价格,我觉得多重小数点的问题是因为价格之间缺少空格。也许网络破坏者需要修复?如果你想继续你所拥有的,你可以用正则表达式。但我的修正只有在价格总是以两位小数给出时才有效

import re

list_prices = [ '90.00', '170.00', '198.00',  '137.99137.99158.00' ]

pattern_price = re.compile(r'[0-9]+\.[0-9]{2}')
list_prices_clean = pattern_price.findall('\n'.join(list_prices))
print(list_prices_clean)

# ['90.00', '170.00', '198.00', '137.99', '137.99', '158.00']

相关问题 更多 >