【问题标题】:How to format a number with comma and specified precision digits in Python如何在 Python 中用逗号和指定的精度数字格式化数字
【发布时间】:2012-10-01 04:53:21
【问题描述】:

问题在于 Python 2.6,这是我们在生产中所拥有的。

我有使用逗号格式化数字(如 1234567.0987 或 1234567.0)的要求,并指定小数点后的位数。因此,如果精度为 3,则 1234567.0987 可能看起来像 1,234,567.099。

我尝试使用区域设置,正如许多问题的答案所建议的那样,问题是导致小数点后两位数,这不符合我的要求。

我尝试在其他地方搜索,但没有找到任何解决方案,最后我自己创建了一个方法:

def format_float(value, precision = 4):
    formatString = "%0." + str(precision) + "f"    
    str_val =  formatString % value
    first, second = str_val.split('.')
    first = int(first)
    group = []
    while True:
        result, mod = first / 1000, first % 1000
        group.append(str(mod))
        if result == 0:
            break
        first = result
    group.reverse() 
    return ','.join(group) + '.' + second

我尝试运行一些测试来测试该方法,它工作正常:

# default 4 digits precision
assert format_float(1234567890.0876543) == '1,234,567,890.0877'
assert format_float(1.2) == '1.2000'
assert format_float(1234) == '1,234.0000'
assert format_float(0) == '0.0000'

# 3 digits precision
assert format_float(1234567890.0876543, precision=3) == '1,234,567,890.088'
assert format_float(0, precision=3) == '0.000'

作为 Python 新手,我的问题是这是否是一个可接受的解决方案。由于这种格式必须在紧密的 for 循环中多次完成,如果有人能指出更好的解决方案,我将不胜感激。

感谢大家

【问题讨论】:

  • 马克,谢谢。这是一个很好的错误,我需要修复它。
  • 您不必使用locale 模块。请参阅我对问题的回答What's the easiest way to add commas to an integer in Python?
  • 马丁,谢谢。我赞成你的回答。但是,您的答案适用于 v2.7,我使用的是 2.6,并且该选项对我不可用。

标签: python number-formatting string-formatting


【解决方案1】:

在 Python 2.7 和 3.x 中,您可以为此使用 str.format

>>> num = 1234567890.0876543
>>> "{0:,f}".format(num)
'1,234,567,890.087654'
>>> "{0:,.2f}".format(num)
'1,234,567,890.08'
>>> "{0:,f}".format(1234)
'1,234.000000'

【讨论】:

  • @kreativitea 刚刚在网上查了一下。我只在 python 2.6 上尝试过,但它不起作用。
  • 谢谢,但是,我编辑了我原来的问题,即 Python 2.6 的这个问题。
【解决方案2】:

我认为您对语言环境模块的研究不够深入。 locale.format() 是您想要的,但请确保您先设置语言环境,否则您将根本无法进行分组。

>>> locale.setlocale(locale.LC_ALL, '')
'en_US.UTF-8'
>>> locale.format("%.4f", 12345.678912, grouping=True)
'12,345.6789'

【讨论】:

  • @cdhowie,谢谢,这对我有用,即使是 .我忽略了 format() 选项。
猜你喜欢
  • 2010-10-16
  • 1970-01-01
  • 1970-01-01
  • 2020-06-03
  • 1970-01-01
  • 2011-05-21
  • 1970-01-01
  • 2014-05-31
相关资源
最近更新 更多