用新的Python格式函数舍入小数

如何使用Python 3.0 format函数将小数点四舍五入到特定的小数位数?

这是一个典型的,有用的例子…:

 >>> n = 4 >>> p = math.pi >>> '{0:.{1}f}'.format(p, n) '3.1416' 

嵌套的{1}取第二个参数,n的当前值,并按照指定的方式应用它(这里是格式的“precision”部分 – 小数点后面的位数),外部结果{0:.4f}然后应用。 当然,如果你愿意的话,你可以硬编码这个4 (或者任何数字的数字),但是关键的一点是,你不必!

更好…:

 >>> '{number:.{digits}f}'.format(number=p, digits=n) '3.1416' 

…而不是像上面的0和1这样的模糊的“参数数字”,你可以select使用shiny的参数名称 ,并将相应的值作为关键字 (又名“ 命名参数)传递给format – 可以如你所见,更可读!

在Python 3.xa格式中,string包含由括号表示的replace字段::

 ".... {0: format_spec} ....".format(value) 

格式规范有一般布局:

 [[fill]align][sign][pad][width][,][.precision][type] 

所以,例如,除了宽度,精度和types代码之外,其他所有的数字都可以被格式化为:

 >>>print("The value of pi is {0:10.7f} to 7 decimal places.".format(math.pi)) 

这将打印为:

 The value of pi is 3.1415927 to 7 decimal places. 

将x舍入到n个小数位使用:

 "{0:.{1}f}".format(x,n) 

其中0和1分别代表str.format()方法的第一个和第二个参数。

我发现可以将{0}{digits}符号组合在一起。 当你想用1声明将所有variables舍入到预先指定的小数位数时,这是特别有用的:

 sName = 'Nander' fFirstFloat = 1.12345 fSecondFloat = 2.34567 fThirdFloat = 34.5678 dNumDecimals = 2 print( '{0} found the following floats: {1:.{digits}f}, {2:.{digits}f}, {3:.{digits}f}'.format(sName, fFirstFloat, fSecondFloat, fThirdFloat, digits=dNumDecimals)) # Nander found the following floats: 1.12, 2.35, 34.57 

更新的答案基于[Alex Martelli]的解决scheme,但使用Python 3.6.2和它的更新格式语法,我会build议:

 >>> n=4 >>> p=math.pi >>> f'{p:.{n}f}' '3.1416' 

但是通过明智地select你的variables,你的代码变成了自我logging

 >>> precision = 4 >>> pi = math.pi >>> f'{pi:.{precision}f}' '3.1416'