使用不同区域设置格式化百分比(逗号为十进制)

2024-06-16 13:48:04 发布

您现在位置:Python中文网/ 问答频道 /正文

关于Python的语言环境设置,已经有很多问题了,这些问题都是关于如何用相应的千和十进制分隔符格式化一个数字,我认为最好的是here

但是,我一直在尝试通过将其功能扩展到百分比来构建此解决方案,但没有成功:

import locale

locale.setlocale(locale.LC_ALL, 'pt_BR.UTF-8')

def pbr(number, isfloat=True):
    if isfloat:
        return locale.format_string('%.2f', number, grouping=True)
    else:
        return locale.format_string('%.2%', number, grouping=True) # Not working

显然'%.2%'不是一个有效的格式化程序,但我不知道应该怎么做才能使

In [1]: pbr(81.23421039401, isfloat=False)
Out[1]: '8.123,42%'

另外,考虑到Python3.8,语言环境解决方案的这种实现(包括format_string函数语法,这似乎是Python2时代的一些遗留问题)仍然是最优的吗


Tags: 语言trueformatnumberstringreturnhere环境
1条回答
网友
1楼 · 发布于 2024-06-16 13:48:04

查看Python documentationPython reference的字符串格式,您似乎试图使用“旧格式样式”中“新格式样式”中的%操作符,这意味着其他内容。这就解释了你的方法失败的原因

使用区域设置实现所需的一种方法是执行乘法并自己添加%符号:

import locale

locale.setlocale(locale.LC_ALL, 'pt_BR.UTF-8')

def pbr(number, isfloat=True):
    if isfloat:
        return locale.format_string('%.2f', number, grouping=True)
    else:
        return locale.format_string('%.2f%%', number*100, grouping=True)

我不能说这在Python3.8中是否仍然是最佳的,我觉得应该有一种方法可以简单地将string.format与新样式一起使用,但我还没有找到让它使用区域设置的方法

相关问题 更多 >