2017-03-21 40 views
3

我知道在大的整数理论上的数字可以通过数千更好的可读性进行分组:如何设置自定义千位分隔符?

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这样的数字看起来很奇怪。

我们可以以某种方式强制一个不间断空间被用作千位分隔符吗?

+3

解决方法:''1_234_567_890“.replace(”_“,'。')'给你想要的东西 – inspectorG4dget

+0

'locale.currency(var,symbol = False,grouping = True)',因为'pl_PL'确实包含货币价值的分隔符。 – TemporalWolf

+0

[如何使用逗号作为千位分隔符来打印数字?]可能的重复(http://stackoverflow.com/questions/1823058/how-to-print-number-with-commas-as-thousands-separators) – Prune

回答

1

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

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