如何在当前语言环境中格式化 Python 中的浮点数

ale*_*leb 7 internationalization python-3.x

我想根据当前区域设置在我的 Python 应用程序中格式化浮点数。格式规范迷你语言指出“浮点和十进制值的可用表示类型”之一是:

“n”号。这与“g”相同,只是它使用当前区域设置来插入适当的数字分隔符。

但我无法让它发挥作用。这就是我尝试的方法:

$ unset LC_ALL
$ unset LANG
$ export LANG=de_DE.UTF-8
$ python3 -c "import locale; print (locale.getdefaultlocale())"
('de_DE', 'UTF-8')

$ python3 -c "print ('{0:.3n}'.format(3.14))"
3.14
Run Code Online (Sandbox Code Playgroud)

我也尝试过:

$ python3 -c "import locale; print (locale.str(3.14))"
3.14
$ python3 -c "import locale; print (locale.format_string('%.2f', 3.14))"
3.14
Run Code Online (Sandbox Code Playgroud)

我希望所有这些都能打印出来3,14,但不是3.14。知道出了什么问题吗?

小智 1

format_string()说“根据当前LC_NUMERIC设置格式化数字val。”

如果您想测试不同区域设置中的数字,可以通过以下方式更改区域设置:

import locale
# Change to German locale
locale.setlocale(locale.LC_NUMERIC, 'de_DE')
Run Code Online (Sandbox Code Playgroud)

使用您的一些示例,我们有:

number = 3.14
print(r'Expecting 3,14   Using %g')
print(locale.format_string('%g', number))

print(r'Expecting 3,14   Using %.2f')
print(locale.format_string('%.2f', number))

print(r'Expecting 3,14   Using locale.str()')
print(locale.str(number))
Run Code Online (Sandbox Code Playgroud)

输出:

Expecting 3,14   Using %g
3,14
Expecting 3,14   Using %.2f
3,14
Expecting 3,14   Using locale.str()
3,14
Run Code Online (Sandbox Code Playgroud)

将区域设置(返回)更改为美国

locale.setlocale(locale.LC_NUMERIC, 'en_US')
Run Code Online (Sandbox Code Playgroud)

现在我得到以下输出:

Expecting 3.14   Using %g
3.14
Expecting 3.14   Using %.2f
3.14
Expecting 3.14   Using locale.str()
3.14
Run Code Online (Sandbox Code Playgroud)