问题是Python2.6,这就是我们在生产中所拥有的。
我要求用逗号格式化一个数字(如1234567.0987或1234567.0),并在小数点后指定位数。所以,如果精度是3,1234567.0987可能看起来像1234567.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
我试着运行一些测试来测试这个方法,结果很好:
# 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的新手,我的问题是这是否是一个可接受的解决方案。由于这种格式必须在一个紧凑的循环中多次完成,如果有人能指出更好的解决方案,我将不胜感激。
谢谢大家
我觉得你对locale模块的了解不够深入。^{} 是您想要的,但是请确保首先设置一个区域设置,否则您根本就不会得到分组。
在Python2.7和3.x中,可以使用
str.format
来完成以下操作:相关问题 更多 >
编程相关推荐