You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Python中获取货币小数位数?能否不依赖区域设置?

如何直接根据货币而非区域设置获取小数位数?

我需要获取不同货币的小数位数(比如美元是2位,日元是0位)。目前我是通过区域设置实现的,代码如下:

import locale
locale.setlocale(locale.LC_ALL, 'en_us')
print(locale.localeconv()['frac_digits']) # 输出2
locale.setlocale(locale.LC_ALL, 'ja')
print(locale.localeconv()['frac_digits']) # 输出0

请问有没有办法直接根据货币(比如传入USD、JPY这类代码)来获取对应的小数位数,而不用依赖区域设置?


方法1:手动维护货币映射表

如果涉及的货币种类有限,最简单直接的方式是自己维护一个货币代码到小数位数的映射字典:

CURRENCY_DECIMALS = {
    'USD': 2,
    'JPY': 0,
    'EUR': 2,
    'GBP': 2,
    'CNY': 2,
    # 根据业务需求添加更多货币
}

def get_currency_decimals(currency_code):
    # 默认返回2位小数(多数货币的通用规则)
    return CURRENCY_DECIMALS.get(currency_code.upper(), 2)

# 使用示例
print(get_currency_decimals('USD')) # 2
print(get_currency_decimals('JPY')) # 0

这种方式无需依赖外部库,逻辑清晰,适合货币范围明确的场景。

方法2:用专业货币数据工具

如果需要覆盖全球绝大多数货币,推荐使用babel库——它内置了基于Unicode CLDR(通用区域数据仓库)的标准货币元数据:
先安装依赖:

pip install babel

然后通过内置函数直接获取:

from babel.numbers import get_currency_precision

print(get_currency_precision('USD')) # 2
print(get_currency_precision('JPY')) # 0
print(get_currency_precision('KRW')) # 0

get_currency_precision函数直接接收ISO货币代码,返回的是该货币的标准小数位数,准确性和覆盖度都有保障。

对比依赖区域设置的方式,直接基于货币代码的逻辑更稳定——因为少数区域可能对同一货币有特殊配置,但货币本身的标准小数位数是固定的。

内容的提问来源于stack exchange,提问作者Andrey

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.12 19:07:34