格式化具有不同语言环境的百分比逗号为十进制

问题描述

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%',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 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)

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