如何在Python中使用逗号和指定精度数字格式化数字

2024-02-18

问题是针对 Python 2.6,这就是我们在生产环境中使用的版本。

我需要用逗号格式化数字(例如 1234567.0987 或 1234567.0),并指定小数点后的位数。因此,如果精度为三,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 循环中多次完成,因此如果有人能指出更好的解决方案,我将不胜感激。

感谢和问候所有人


在 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'
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在Python中使用逗号和指定精度数字格式化数字 的相关文章

随机推荐