我想要显示:
49 as 49.00
and:
54.9和54.90
无论小数点的长度或是否有任何小数点,我想显示一个小数点后2位的小数,我想以一种有效的方式做到这一点。目的是展示货币价值。
例如,4898489.00
有关内置浮点类型的类似问题,请参阅将浮点数限制为两个小数点。
我想要显示:
49 as 49.00
and:
54.9和54.90
无论小数点的长度或是否有任何小数点,我想显示一个小数点后2位的小数,我想以一种有效的方式做到这一点。目的是展示货币价值。
例如,4898489.00
有关内置浮点类型的类似问题,请参阅将浮点数限制为两个小数点。
当前回答
>>> print "{:.2f}".format(1.123456)
1.12
你可以把2f中的2改成你想显示的任何小数点。
编辑:
在Python3.6中,它转换为:
>>> print(f"{1.1234:.2f}")
1.12
其他回答
.format是一种可读性更好的处理变量格式化的方式:
'{:.{prec}f}'.format(26.034, prec=2)
>>> print "{:.2f}".format(1.123456)
1.12
你可以把2f中的2改成你想显示的任何小数点。
编辑:
在Python3.6中,它转换为:
>>> print(f"{1.1234:.2f}")
1.12
OP总是希望显示两个小数点后的位置,因此像所有其他答案所做的那样,显式地调用格式化函数是不够的。
正如其他人已经指出的那样,Decimal适用于货币。但是Decimal显示了所有的小数点。因此,重写它的显示格式化器:
class D(decimal.Decimal):
def __str__(self):
return f'{self:.2f}'
用法:
>>> cash = D(300000.991)
>>> print(cash)
300000.99
简单。
编辑:
显示小数点后至少两位,但不截断有效数字:
class D(decimal.Decimal):
def __str__(self):
"""Display at least two decimal places."""
result = str(self)
i = result.find('.')
if i == -1:
# No '.' in self. Pad with '.00'.
result += '.00'
elif len(result[i:]) == 2:
# One digit after the decimal place. Pad with a '0'.
result += '0'
return result
我希望Python的未来版本将改进数字格式,以允许最小的小数位数。类似于Excel数字格式中的#符号。
你应该使用新的格式规范来定义你的值应该如何表示:
>>> from math import pi # pi ~ 3.141592653589793
>>> '{0:.2f}'.format(pi)
'3.14'
文档有时可能有点迟钝,所以我推荐以下更容易阅读的参考:
Python字符串格式烹饪书:展示了新风格的.format()字符串格式的示例 Pyformat.info:比较老式的%字符串格式和新式的.format()字符串格式
Python 3.6引入了字面值字符串插值(也称为f-strings),所以现在你可以把上面的代码写得更简洁:
>>> f'{pi:.2f}'
'3.14'
这与你可能已经看到的解决方案是一样的,但是这样做会更清楚:
>>> num = 3.141592654
>>> print(f“Number: {num:.2f}”)