格式化不同语言环境的百分比(逗号作为十进制)

Formatting percentages with different locale (comma as decimal)

SO 已经充满了很多关于 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%'

此外,考虑到 Python 3.8,这种语言环境解决方案的实现(包括 format_string 函数语法,似乎是 Python 2 时代的一些遗留物)是否仍然是最佳的?

查看字符串格式的 Python documentation and Python 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)

我不能说这在 Python 3.8 中是否仍然是最优的,我觉得应该有一种方法可以简单地使用 string.format 和新样式,但我还没有找到方法让它使用语言环境。