csp*_*der 13 python string-formatting number-formatting
问题出在Python 2.6上,这就是我们在生产中所拥有的.
我有这个要求用逗号格式化数字(如1234567.0987或1234567.0),以及小数点后指定的位数.因此,如果精度为3,则1234567.0987可能看起来像1,234,567.099.
我尝试使用Locale,正如许多问题的答案所示,问题是小数点后产生两位数,这对我的要求是不可接受的.
我尝试在其他地方搜索,但没有找到任何解决方案,最后我自己创建了一个方法:
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
Run Code Online (Sandbox Code Playgroud)
我试图运行一些测试来测试该方法,它工作正常:
# 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'
Run Code Online (Sandbox Code Playgroud)
作为Python的新手,我的问题是这是否是一个可接受的解决方案.由于这种格式化必须在紧密的for循环中进行多次,如果有人能指出更好的解决方案,我将不胜感激.
感谢和关心所有人
Ash*_*ary 24
在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'
Run Code Online (Sandbox Code Playgroud)
cdh*_*wie 21
我认为你对locale模块的看法不够深入. locale.format()是你想要的,但要确保你先设置一个区域设置,否则你根本就不会进行分组.
>>> locale.setlocale(locale.LC_ALL, '')
'en_US.UTF-8'
>>> locale.format("%.4f", 12345.678912, grouping=True)
'12,345.6789'
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
17755 次 |
| 最近记录: |