- 数字的格式化输出
- 问题:
- 需要降数字格式化后输出,并控制数字的位数、对齐、千位分隔符和其他的细节。
- 解决方案:
- 格式化输出单个数字的时候,可以使用内置的 format() 函数,比如:
x = 1234.56789
print(format(x, "0.2f")) # 1234.57
print(format(x, ">10.1f")) # " 1234.6"
print(format(x, "<10.1f")) # "1234.6 "
print(format(x, "^10.1f")) # " 1234.6 "
print(format(x, ",")) # 1,234.56789
print(format(x,"0,.1f")) # 1,234.6
print(format(x, "e")) # 1.234568e+03
print(format(x, "0.2E")) # 1.23E+03
- 同时指定宽度和精度的一般形式是"[<>^?width[,]?(digits)?]",其中,width 和 digits 为整数,?代表可选部分。同样的格式也被用在字符串的 format()方法中。比如:
print("The value is {:0,.2f}".format(x)) # The value is 1,234.57
- 讨论: 数字格式化输出通常是比较简单的。上面的例子同样使用于浮点数和 decimal 模式中的 Decimal 数字对象。 当指定数字的位数后,结果值会根据 round() 函数同样的规则进行四舍五入返回,比如:
print(format(-x, "0.1f")) # -1234.6
- 包含千位符的格式化跟本地化没有关系。如果需要格局地区来显示千位符,可以自己去调查下 locale 模块中的函数。同样也可以使用字符串的 translate() 方法来交换千位符。比如:
swap_separators = { ord('.'):',', ord(','):'.' }
format(x, ',').translate(swap_separators) # 1.234,56789
print("%0.2f" % x) # 1234.57
print("%10.1f" % x) # " 1234.6"
- 用这种方法先进性比 format() 要差一些。比如,在使用 % 操作格式化数字的时候,一些 特性(添加千位符)并不能被支持。