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)
| 归档时间: |
|
| 查看次数: |
447 次 |
| 最近记录: |