【问题标题】:Localized decimal numbers format本地化十进制数字格式
【发布时间】:2021-10-27 18:07:16
【问题描述】:

我想以带有千位分隔符和两位小数的本地化格式打印一个数字。

import locale
locale.setlocale(locale.LC_ALL, 'pl_PL.UTF-8')

value = 12345.12356

print(f'{value:,.2f}')
print(f'{value:n}')

输出:

12,345.12
12 345,1

第二个字符串几乎是我想要的,但我找不到定义精度的方法。无法使用

print(f'{value:,.2n}')

Traceback (most recent call last):
  File "x.py", line 8, in <module>
    print(f'{value:,.2n}')
ValueError: Cannot specify ',' with 'n'.

虽然这会产生意想不到的结果:

print(f'{value:.2n}')

1,2e+04

如何设置精度为两位数?

注意,我知道我可以替换 12,345.12 中的字符或使用 decimal 模块等。我只是想知道我是否无法正确解释文档,或者 Python 开发人员是否没有预见到这一点需要。后者将是一个令人不快的惊喜。

【问题讨论】:

  • 嗯,我原以为.2n 会是正确的格式说明符。这实际上可能是一个 Python 错误。看起来print(f'{value:.7n}') 给出了“正确”的结果,这让我认为确定精度的任何代码都不是区域设置感知的。
  • locale.format_string("%.2f", 12345.12356, grouping=True) 似乎给出了预期的结果。
  • 这似乎是未解决的问题bpo33731
  • 感谢您的更新。我不知道@wim
  • 还有一个 bpo35638 正在等待 PR GH-11405

标签: python python-3.x format


【解决方案1】:

你可以试试这个:

import locale
locale.setlocale(locale.LC_ALL, '') # Use '' for auto, or force e.g. to 'en_US.UTF-8'

value = 12345.12356

print(locale.format_string("%.2f", value, grouping=True))

输出:12,345.12

import locale
from babel import numbers

value = 12345.12356

val = numbers.format_decimal(value, locale='pl_PL')
print (val)

输出:12 345,124

【讨论】:

  • @Sabil - 基本上,我想使用f"..." 格式,但现在似乎不可能。您的回答是一个很好的解决方法,肯定比替换字符更好。顺便说一句,locale.format_string() 没有折旧。谢谢!
  • 你可以使用吗?那么我可以提供另一个解决方案@adam
猜你喜欢
  • 1970-01-01
  • 2013-08-22
  • 2020-07-21
  • 1970-01-01
  • 2017-10-06
  • 1970-01-01
  • 2020-11-19
  • 1970-01-01
相关资源
最近更新 更多