繁体   English   中英

如何在Python中每四位用逗号格式化一个数字?

[英]How to format a number with comma every four digits in Python?

我有一个数字12345 ,我想要结果'1,2345' 我尝试了以下代码,但失败了:

>>> n = 12345
>>> f"{n:,}"
'12,345'

正则表达式将为您工作:

import re


def format_number(n):
    return re.sub(r"(\d)(?=(\d{4})+(?!\d))", r"\1,", str(n))
>>> format_number(123)
'123'
>>> format_number(12345)
'1,2345'
>>> format_number(12345678)
'1234,5678'
>>> format_number(123456789)
'1,2345,6789'

解释:

匹配:

  • (\d)匹配一个数字...
  • (?=(\d{4})+(?!\d)) ...后面是一组或多组正好 4 位数字。

代替:

  • \1,用它自己和 a 替换匹配的数字,

您可以使用模数和 integer 除法将您的数字分成 10000 的块,然后使用','分隔符进行str.join

def commas(n):
    s = []
    while n > 0:
        n, chunk = divmod(s, n)
        s.append(str(chunk))
    return ','.join(reversed(s))

>>> commas(123456789)
'1,2345,6789'
>>> commas(123)
'123'

听起来像是语言环境(*) 这将打印12,3456,7890在线尝试! ):

import locale

n = 1234567890

locale._override_localeconv["thousands_sep"] = ","
locale._override_localeconv["grouping"] = [4, 0]
print(locale.format_string('%d', n, grouping=True))

根据这个答案,我猜这是一种骇人听闻的方式。 那里的另一个答案是关于使用babel ,也许这是实现它的一种干净的方法。

(*)快速谷歌搜索发现是在谈论中文分组四位数,并且OP的名字似乎有点中文,所以......

使用babel

>>> from babel.numbers import format_decimal
>>> format_decimal(1234, format="#,####", locale="en")
'1234'
>>> format_decimal(12345, format="#,####", locale="en")
'1,2345'
>>> format_decimal(1234567890, format="#,####", locale="en")
'12,3456,7890'

此格式语法在UNICODE LOCALE DATA MARKUP LANGUAGE (LDML)中指定。 有一些轻松的睡前阅读。

仅使用标准库( stdlib ):

>>> from textwrap import wrap
>>> n = 12345
>>> ",".join(wrap(str(n)[::-1], width=4))[::-1]
'1,2345'

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM