gpt4 book ai didi

python - 寻找一种将价格解析为小数的通用方法

转载 作者:太空狗 更新时间:2023-10-30 00:13:16 25 4
gpt4 key购买 nike

我正在从事一个必须解析价格的项目。我必须考虑不同格式的价格。

问题:

美国公民这样写价格:1,000.00

EU 这样:1.000,00

这个问题可以通过使用逗号和点拆分字符串来解决,因此列表中的最后一项将是美分。问题是有时人们根本不写美分,所以有人可以写 1.000 欧元。

还有其他问题……有时人们根本不写点。

你知道一些可以解决这个问题并返回价格的 decimal.Decimal 的 python 模块或函数吗?我不关心货币。

编辑:假设我将有数千种这种格式的价格。

最佳答案

此代码使用此逻辑:

  • 如果没有'.'或 ',' 存在,只需转换为 float
  • 否则如果“,”或“。”是倒数第三个字符,那么这是小数点字符:

    .然后剥离非十进制字符,将十进制字符更改为“。”如果需要,则转换为 float

  • 其他

    .没有给出小数部分,只去掉所有“,”和“。”并转换为 float

此代码非常依赖于获取有效字符串 - 像 "1,2,3.000""1..." 这样的无效字符串将给出错误的值。

def parse_price(s):
if '.' not in s and ',' not in s:
return float(s)

elif s[-3] in ',.':
dec_char = s[-3]
sep_char = {'.': ',', ',':'.'}[dec_char]
s = s.replace(sep_char, '')
s = s.replace(',', '.')
return float(s)

else:
s = s.replace(',','').replace('.', '')
return float(s)

tests = """\
1.000
1.000,20
23.14
1,234
1.23
3,12
""".splitlines()
for test in tests:
print(test, '->', parse_price(test))

给予

1.000 -> 1000.0
1.000,20 -> 1000.2
23.14 -> 23.14
1,234 -> 1234.0
1.23 -> 1.23
3,12 -> 3.12

关于python - 寻找一种将价格解析为小数的通用方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41023295/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com