我想要显示:

49 as 49.00

and:

54.9和54.90

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

例如,4898489.00


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


当前回答

是什么

print round(20.2564567 , 2)    >>>>>>>        20.25


print round(20.2564567 , 4)    >>>>>>>        20.2564

其他回答

我猜你可能正在使用Decimal模块中的Decimal()对象?(如果对于任意大的数字,你需要精确到小数点后两位的精度,你绝对应该这样做,这就是你问题的标题所暗示的…)

如果是这样,文档的Decimal FAQ部分有一个可能对你有用的问题/答案对:

Q.在有两位小数点的定点应用程序中,有些输入有很多位,需要四舍五入。其他的不应该有多余的数字,需要验证。应该使用什么方法? a . quantize()方法舍入到小数点后的固定位数。如果设置了Inexact陷阱,它对验证也很有用:

>>> TWOPLACES = Decimal(10) ** -2       # same as Decimal('0.01')
>>> # Round to two places
>>> Decimal('3.214').quantize(TWOPLACES)
Decimal('3.21')
>>> # Validate that a number does not exceed two places
>>> Decimal('3.21').quantize(TWOPLACES, context=Context(traps=[Inexact]))
Decimal('3.21')
>>> Decimal('3.214').quantize(TWOPLACES, context=Context(traps=[Inexact]))
Traceback (most recent call last):
   ...
Inexact: None

下一个问题是

问:一旦我有了有效的两地输入,我如何在整个应用程序中保持这个不变式?

如果您需要答案(以及许多其他有用的信息),请参阅文档中前面提到的部分。同样,如果你保持你的小数有两位精度超过小数点(意味着尽可能多的精度是必要的,以保持所有的数字在小数点的左边,两个在它的右边,没有更多的…),然后用str将它们转换为字符串将很好:

str(Decimal('10'))
# -> '10'
str(Decimal('10.00'))
# -> '10.00'
str(Decimal('10.000'))
# -> '10.000'
>>> print "{:.2f}".format(1.123456)
1.12

你可以把2f中的2改成你想显示的任何小数点。

编辑:

在Python3.6中,它转换为:

>>> print(f"{1.1234:.2f}")
1.12

这与你可能已经看到的解决方案是一样的,但是这样做会更清楚:

>>> num = 3.141592654

>>> print(f“Number: {num:.2f}”)

.format是一种可读性更好的处理变量格式化的方式:

'{:.{prec}f}'.format(26.034, prec=2)

最简单的例子是:

代码:

>>>分= 19.5分 >>> total = 22 >>>'正确答案:{:.2%}'.format(分数/总分) `

输出:正确答案:88.64%