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

如何让数字格式化始终返回英文阿拉伯数字?

解决Python格式化数字始终返回英文阿拉伯数字的问题

你之前的写法"%.2f".format(1.221, Locale.ENGLISH)是错误的——str.format()的第二个参数并不是区域设置(locale),而是格式化的额外参数,所以这个写法根本没生效。下面是几种可靠的解决方案:

方法一:通过locale模块强制设置英文区域

Python的数字格式化会受系统默认locale影响,我们可以手动指定英文locale来覆盖:

import locale

# 兼容不同系统的英文locale名称
try:
    # Linux/macOS常用的英文locale
    locale.setlocale(locale.LC_NUMERIC, "en_US.UTF-8")
except locale.Error:
    # Windows系统的英文locale
    locale.setlocale(locale.LC_NUMERIC, "English_US")

# 两种格式化方式都能生效
result1 = "%.2f" % 1.221
result2 = "{:.2f}".format(1.221)
print(result1)  # 输出 1.22
print(result2)  # 输出 1.22

方法二:使用decimal模块独立控制格式化

如果不想依赖系统locale,可以用decimal模块,它的格式化不受系统区域影响:

from decimal import Decimal, ROUND_HALF_UP

# 精确格式化到两位小数,采用四舍五入
num = Decimal(str(1.221)).quantize(Decimal('0.00'), rounding=ROUND_HALF_UP)
result = str(num)
print(result)  # 输出 1.22

方法三:兜底替换(不推荐但应急可用)

如果前两种方法都无法生效,可以直接替换字符串中的非英文数字和分隔符:

result = "{:.2f}".format(1.221)
# 替换波斯/阿拉伯数字为英文数字
num_trans = str.maketrans('۰۱۲۳۴۵۶۷۸۹', '0123456789')
result = result.translate(num_trans)
# 替换逗号为英文小数点(部分locale用逗号做小数点分隔符)
result = result.replace(',', '.')
print(result)  # 输出 1.22

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 23:41:10