【问题标题】:How to set a custom thousands separator?如何设置自定义千位分隔符?
【发布时间】:2017-03-21 20:23:54
【问题描述】:

我知道理论上大整数中的数字可以按千分组以提高可读性:

Python 3.5.2 (default, Nov 17 2016, 17:05:23) 
[GCC 5.4.0 20160609] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import locale
>>> locale.setlocale(locale.LC_ALL, 'en_US.UTF-8')
'en_US.UTF-8'
>>> locale.format('%d', 1234567890, grouping=True)
'1,234,567,890'
>>> "{:n}".format(1234567890)
'1,234,567,890'

然而,令人惊讶的是,这并不适用于所有语言环境:

>>> locale.setlocale(locale.LC_ALL, 'pl_PL.UTF-8')
'pl_PL.UTF-8'
>>> locale.format('%d', 1234567890, grouping=True)
'1234567890'
>>> "{:n}".format(1234567890)
'1234567890'

为什么数字没有格式化?我觉得这很奇怪。我希望像 1 234 567 890 这样的东西会被打印出来。

根据Format Specification Mini-Language,我们可以明确强制使用两种可能的分隔符:逗号, 和下划线_。遗憾的是,逗号不适用于波兰语,因为它在那里用作小数点分隔符,而像 1_234_567_890 这样的数字对于大多数人来说看起来很奇怪。

我们能否以某种方式强制将不间断空格 用作千位分隔符?

【问题讨论】:

  • 解决方法:"1_234_567_890".replace("_", '.') 给你你想要的
  • locale.currency(var, symbol=False, grouping=True),因为pl_PL 确实包含. 货币值分隔符。
  • @Prune:提问者想要句号,而不是逗号。
  • @Prune 此外,我非常清楚如何设置逗号,我在帖子中提到过。

标签: python formatting integer locale


【解决方案1】:

pl_PL 语言环境千位分隔符似乎是 empty。我不知道这是否准确地代表了波兰的常见用法,但 Python 会根据 pl_PL 语言环境的规则正确格式化您的号码。这可能是语言环境文件中的错误。

据我所知,没有手动指定千位分隔符和小数点字符的选项。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-09-14
    • 2011-07-16
    • 2016-01-16
    • 1970-01-01
    • 2010-10-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多