在Python中如何格式化多种货币?

0 投票
2 回答
872 浏览
提问于 2025-04-16 02:36

我有一个用Python写的网页服务器(用的是mod_python,如果这有影响的话),我想开始格式化一些货币。在格式化货币时,我有两样信息:一个是数值(以数字形式表示),另一个是货币类型(用三个字母的ISO 4217代码表示)。我还可以获取货币格式化的国家(甚至是城市)。我需要处理的货币种类很多,比如美元(USD)、加元(CAD)、日元(JPY)、英镑(GBP)、欧元(EUR)等等。每次请求可能使用不同的货币。

我知道有一个locale模块,但它不能满足我的需求。这个模块似乎是基于电脑的地区设置,所以在格式化特定货币时效果不好。

有没有办法在Python中做到这一点?或者有没有人知道什么好的库可以解决这个问题?

2 个回答

1

我相信你可以使用正则表达式或者小数格式化,但这个模块看起来很不错:

http://code.google.com/p/python-money/

Python-money 提供了一些精心设计的基本 Python 工具,专门用来处理钱和货币。

这个模块的主要目标是帮助开发金融应用程序,通过提高可测试性和可重用性,减少代码重复,并降低代码出错的风险。

这个模块定义了两个基本的 Python 类——一个是货币类(Currency),另一个是钱类(Money)。它还根据 ISO 4217 标准预定义了世界上所有的货币。这个类提供了一些基本的操作,用于处理不同货币的钱,比如加法、减法、乘法等。它们还定义了与货币相关的比较操作符。为了避免在货币计算中出现浮点精度错误,这个模块专门使用 Python 的 Decimal 类型。

这个模块的设计基于“Money”企业设计模式,详细内容可以参考 Martin Fowler 的《企业应用架构模式》一书。

2

为了满足我的国际化需求,我几乎总是选择使用ICU,这是一个非常强大的工具,功能丰富且深度广泛。通常我会通过pyIcu来使用它,虽然在过去有时候我需要自己做一些封装,因为pyIcu还没有处理我需要的ICU的某些功能(我不确定他们现在是否已经处理了你需要的所有货币格式化操作)。

PyIcu的文档可以在这里找到,建议在阅读时结合ICU自己的文档这里。换句话说,PyIcu的文档实际上是一本“短语手册和字典”,帮助你把ICU的C++文档“翻译”成适合PyIcu(和Python)的文档;-)。我知道,这样的情况并不理想——这并不是唯一一个文档不够完善的开源工具(我觉得这为一些有心人提供了机会,去写一本“PyIcu,缺失的手册”之类的书;-))。

撰写回答