如何格式化小数点总是显示2个小数位?

我想显示:

4949.00

和:

54.954.90

无论小数点的长度还是小数位数,我都希望显示一个有2位小数的小数位数,我想以一种有效的方式来实现。 目的是显示货币价值。

例如4898489.00

我想你可能使用decimal模块中的Decimal()对象? (如果你需要精确的两位数的精度超过小数点以上任意大的数字,你绝对应该是,这就是你的问题的标题build议…)

如果是这样,文档的小数常见问题部分有一个问题/答案对可能对您有用:

问:在小数点后两位的定点应用程序中,某些input有许多地方需要四舍五入。 其他人不应该有超过数字,需要validation。 应该使用什么方法?

答:量化()方法四舍五入到固定的小数位数。 如果设置了不确定陷阱,那么validation也是有用的:

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

接下来的问题是

问:一旦我有有效的两个地方的投入,如何保持整个应用程序不变?

如果你需要的答案(以及其他许多有用的信息),请参阅文档的上述部分 。 此外,如果您保留Decimal两位数的精度(意味着保留小数点左边的所有数字和右边的两个数字所需的精度) ,然后将它们转换为str将正常工作:

 str(Decimal('10')) # -> '10' str(Decimal('10.00')) # -> '10.00' str(Decimal('10.000')) # -> '10.000' 

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

 >>> from math import pi # pi ~ 3.141592653589793 >>> '{0:.2f}'.format(pi) '3.14' 

这个文档有时候可能会有些迟钝,所以我推荐下面的,更易读的参考:

  • Pythonstring格式指南 :显示新样式.format()string格式的示例
  • pyformat.info :比较旧式%string格式与新式.format()string格式

Python 3.6引入了文字string插值 (也称为f-string),所以现在你可以把上面的内容写得更加简洁:

 >>> f'{pi:.2f}' '3.14' 

Python文档的string格式化操作部分包含您正在查找的答案。 简而言之:

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

你可以像这样使用string格式化操作符 :

 num = 49 x = "%.2f" % num # x is now the string "49.00" 

我不确定“高效”是什么意思 – 这几乎肯定不是您应用程序的瓶颈。 如果您的程序运行缓慢,请首先对其进行分析以find热点,然后对其进行优化。

.format是处理variables格式的更可读的方式:

 '{:.{prec}f}'.format(26.034, prec=2) 
 >>> print "{:.2f}".format(1.123456) 1.12 

您可以将2f 2更改为您要显示的任意小数点数。

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

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

关于什么

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