用新的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'