我想要显示:

49 as 49.00

and:

54.9和54.90

无论小数点的长度或是否有任何小数点,我想显示一个小数点后2位的小数,我想以一种有效的方式做到这一点。目的是展示货币价值。

例如,4898489.00


有关内置浮点类型的类似问题,请参阅将浮点数限制为两个小数点。


当前回答

Python文档中的字符串格式化操作部分包含了您正在寻找的答案。简而言之:

"%0.2f" % (num,)

一些例子:

>>> "%0.2f" % 10
'10.00'
>>> "%0.2f" % 1000
'1000.00'
>>> "%0.2f" % 10.1
'10.10'
>>> "%0.2f" % 10.120
'10.12'
>>> "%0.2f" % 10.126
'10.13'

其他回答

如果你有多个参数,你可以使用

 print('some string {0:.2f} & {1:.2f}'.format(1.1234,2.345))
 >>> some string 1.12 & 2.35

Python文档中的字符串格式化操作部分包含了您正在寻找的答案。简而言之:

"%0.2f" % (num,)

一些例子:

>>> "%0.2f" % 10
'10.00'
>>> "%0.2f" % 1000
'1000.00'
>>> "%0.2f" % 10.1
'10.10'
>>> "%0.2f" % 10.120
'10.12'
>>> "%0.2f" % 10.126
'10.13'

在python 3中,这样做的一种方法是

'{:.2f}'.format(number)

你应该使用新的格式规范来定义你的值应该如何表示:

>>> 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'

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数字格式中的#符号。