【发布时间】:2021-01-13 10:34:12
【问题描述】:
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,这种语言环境解决方案的实现(包括似乎是 Python 2 时代遗留下来的 format_string 函数语法)是否仍然是最佳的?
【问题讨论】:
-
如文档所述,
format_string()“遵循%运算符的约定”,这意味着您可以使用'%.2f%%'作为格式字符串。为了向后兼容,它可能是“剩余的”。%符号本身是 Cprintf()函数的继承。无论如何,请注意结果将是81,23%,而不是您在问题中显示的内容。 -
您确定 '%.2%' 是有效的说明符吗?此外,我对您的函数逻辑感到困惑,在示例中,您将浮点数传递给函数,但指定 isfloat=False。如果我是正确的,您正在尝试将美式表示法的浮点数:81.23421039401 转换为欧洲惯例:81,23421039401 并用 '%.2f' 将小数四舍五入为:81,23,并将其设为字符串:' 81,23'?然后,如果它不是浮点数,则返回一个带有其他说明符 '%.2%' 的字符串?
-
@martineau,感谢您提供的信息,我对旧符号一无所知,所以当我必须在 Python 3 中处理它时,它总是让我感到困扰。正如 Anab 的回答所指出的那样,缺乏适当的通过改变函数的实现可以很容易地绕过百分比符号。
标签: python locale number-formatting