首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >在Python中将数字格式化为货币

在Python中将数字格式化为货币
EN

Stack Overflow用户
提问于 2016-06-01 22:20:37
回答 3查看 20.9K关注 0票数 12

我从Currency formatting in Python学到,使用locale模块将数字格式化为货币。例如,

代码语言:javascript
运行
AI代码解释
复制
#! /usr/bin/env python
# -*- coding: utf-8 -*-

import locale

value = 123456789

l = locale.setlocale(locale.LC_ALL, '')     # LC_CTYPE=en_US.UTF-8;LC_NUMERIC=fr_FR.UTF-8;LC_TIME=fr_FR.UTF-8;LC_COLLATE=en_US.UTF-8;LC_MONETARY=fr_FR.UTF-8;LC_MESSAGES=en_US.UTF-8;LC_PAPER=fr_FR.UTF-8;LC_NAME=fr_FR.UTF-8;LC_ADDRESS=fr_FR.UTF-8;LC_TELEPHONE=fr_FR.UTF-8;LC_MEASUREMENT=fr_FR.UTF-8;LC_IDENTIFICATION=fr_FR.UTF-8
s = locale.currency(value, grouping=True)   # 123 456 789,00 €

locale.setlocale(locale.LC_ALL, 'en_US.utf-8') 
s = locale.currency(value, grouping=True)   # $123,456,789.00

locale.setlocale(locale.LC_ALL, 'en_US')    # WHY? locale.Error: unsupported locale setting
s = locale.currency(value, grouping=True)

我想将数字格式化为其他货币,比如de_DE。我遇到了locale.Error: unsupported locale setting问题,因为区域设置de_DE不在locale -a列表中。

代码语言:javascript
运行
AI代码解释
复制
locale.setlocale(locale.LC_ALL, 'de_DE')        # locale.Error: unsupported locale setting
s = locale.currency(value, grouping=True)

一种解决方案是将此区域设置添加到我的机器中。有没有更好的方法?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2016-06-01 22:30:19

babel.numbers

代码语言:javascript
运行
AI代码解释
复制
In [22]: from babel.numbers import format_decimal
In [23]:  format_decimal(12345, locale='de_DE')
Out[23]: u'12.345'

In [24]: format_decimal(1.2345, locale='sv_SE')
Out[24]: u'1,234'

或者在您的情况下是format_currency

代码语言:javascript
运行
AI代码解释
复制
In [7]: from babel.numbers import format_currency

In [8]: print format_currency(1099.98, 'USD', locale='en_US')
$1,099.98

In [9]: print format_currency(1099.98, 'USD', locale='es_CO')
1.099,98 US$

In [10]: print format_currency(1099.98, 'EUR', locale='de_DE')
1.099,98
票数 10
EN

Stack Overflow用户

发布于 2019-07-29 17:05:13

作为参考(对于那些希望设置类似于设置货币格式的数字的人),可以使用locale.format_string来设置数字的格式

代码语言:javascript
运行
AI代码解释
复制
value = 123456789

import locale
locale.setlocale(locale.LC_ALL, 'de_DE') 
print(locale.format_string('%.2f', value, True))

将会返回

代码语言:javascript
运行
AI代码解释
复制
123.456.789,00
票数 2
EN

Stack Overflow用户

发布于 2021-11-18 11:42:18

我知道有两种解决方案:

Babel

Babel是最好的解决方案,因为您可以选择任何货币,而不管语言环境如何。

缺点是它的文档记录得很少。要了解所有选项,您必须读取要使用的函数的Babel source code

安装Babel:

代码语言:javascript
运行
AI代码解释
复制
$ pip install Babel

使用方法:

代码语言:javascript
运行
AI代码解释
复制
import babel.numbers

amount = 123456789.123

print(babel.numbers.format_currency(amount, 'EUR', locale='fr_CA'))
# 123456789,12print(babel.numbers.format_currency(amount, 'EUR', locale='en_CA'))
# €123,456,789.12

print(babel.numbers.format_currency(amount, '', locale='en_CA'))
# 123,456,789.12

localize.currency()

locale.currency()的一个限制是它假定与区域设置相匹配的货币。例如en_US => $/USDfr_FR => €/EUR,因此如果显示的货币与区域设置不匹配,您可能希望在之后使用String.replace()方法替换货币符号。

根据区域设置,例如en_USen_GBfr_FRfr_CA,它将知道:

要使用的小数点分隔符(例如100,00)

  • Which vs 1.000)

  • Which

  • )(例如要使用的100.00 vs 100,00)

  • Which千位分隔符(例如1,000 vs 1.000)

  • Which要使用的货币符号)(例如用于放置货币符号的€100 vs USD 100$100 vs $100

代码语言:javascript
运行
AI代码解释
复制
import locale

locale.setlocale(locale.LC_ALL, 'fr_FR')

amount = 123456789.123
grouping = True  # thousands separator

# '123.456.789,12 Eu'
locale.currency(amount, symbol=True, grouping=True, international=False)

# '123.456.789,12 EUR'
locale.currency(amount, symbol=True, grouping=True, international=False)

# '123.456,789'
locale.currency(amount, symbol=False, grouping=True)

# '123456,789'
locale.currency(amount, symbol=False, grouping=True)

可选参数如下

代码语言:javascript
运行
AI代码解释
复制
# which currency symbol to use, and where to place it
symbol=True and international=True # => 'USD 100.00'
symbol=True and international=False # => '$100.00'
symbol=False # => '100.00'

# thousands separator
grouping = True # => '1000.00'
grouping = False # => '1,000.00'
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/37579712

复制
相关文章

相似问题

领券
社区富文本编辑器全新改版!诚邀体验~
全新交互,全新视觉,新增快捷键、悬浮工具栏、高亮块等功能并同时优化现有功能,全面提升创作效率和体验
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文