寻找一种将价格解析为分币的通用方法

2024-09-26 18:17:07 发布

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

我在做一个项目,我要分析价格。我得考虑不同的价格形式。在

问题:

美国市民这样写价格:1000.00

欧盟这样:1.000,00

这个问题可以通过使用逗号和点来解决,这样列表中的最后一项将是美分。问题是,有时候人们根本不写美分,所以有人可以写1000欧元。在

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

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

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


Tags: 模块项目函数编辑列表格式货币价格
2条回答

使用price-parser

>>> from price_parser import parse_price
>>> parse_price('1,000.00')
Price(amount=Decimal('1000.00'), currency=None)
>>> parse_price('1.000,00')
Price(amount=Decimal('1000.00'), currency=None)

此代码使用以下逻辑:

  • 如果不存在“.”或“,”,只需转换为float
  • 否则,如果“,”或“.”是距结尾的第三个字符,则这是十进制字符:

    一。去掉非十进制字符,如有必要,将十进制字符改为“.”,然后转换为浮点

  • 其他

    一。没有给出小数部分,只需去掉所有“,”和“.”并转换为浮点值

这段代码非常依赖于获取有效的字符串-无效的字符串如"1,2,3.000"或{}将给出错误的值。在

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

给予

^{pr2}$

相关问题 更多 >

    热门问题