如何让数字格式化始终返回英文阿拉伯数字?
解决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
相关产品推荐
相关产品推荐

