如何使用Python 3.0 format
函数将小数舍入到特定数量的小数位?
答案 0 :(得分:83)
这是一个典型的,有用的例子......:
>>> n = 4
>>> p = math.pi
>>> '{0:.{1}f}'.format(p, n)
'3.1416'
嵌套{1}
获取第二个参数,n的当前值,并按指定应用它(此处为格式的“精度”部分 - 小数点后的位数),以及然后应用外部结果{0:.4f}
。当然,如果您愿意,您可以对4
(或任意数字的数字)进行硬编码,但关键是,
更好......:
>>> '{number:.{digits}f}'.format(number=p, digits=n)
'3.1416'
...而不是像上面0和1那样模糊的“参数数字”,你可以选择使用闪亮的参数名称,并将相应的值作为关键字<传递/ em>(又名“名为”)format
的参数 - 可以如此更具可读性,如您所见!!! \ n \ t
答案 1 :(得分:13)
在Python 3.x中,格式字符串包含由大括号表示的替换字段::
".... {0: format_spec} ....".format(value)
格式规范具有一般布局:
[[fill]align][sign][pad][width][,][.precision][type]
因此,例如,除了宽度,精度和类型代码之外的所有其他内容,可以将十进制或浮点数格式化为:
>>>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.
答案 2 :(得分:3)
要将x舍入到n位小数,请使用:
"{0:.{1}f}".format(x,n)
其中0和1分别代表str.format()方法的第一个和第二个参数。
答案 3 :(得分:2)
基于[Alex Martelli]解决方案的更新答案,但使用Python 3.6.2及其更新的格式语法我建议:
>>> n=4
>>> p=math.pi
>>> f'{p:.{n}f}'
'3.1416'
但是,通过明智地选择变量,您的代码将成为自我记录
>>> precision = 4
>>> pi = math.pi
>>> f'{pi:.{precision}f}'
'3.1416'
答案 4 :(得分:1)
我刚刚发现可以将{0}
和{digits}
表示法结合起来。当您想要将所有变量舍入到预先指定的小数且带有1个声明时,这一点尤其有用:
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