使用新的Python格式函数对小数进行四舍五入

72 投票
5 回答
124359 浏览
提问于 2025-04-15 15:14

我想知道怎么用Python 3.0的format函数把小数四舍五入到特定的小数位数。

5 个回答

24

在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.
29

这是一个基于 [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'
124

这里有一个典型且实用的例子...:

>>> 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 相比,你可以选择使用清晰明了的参数 名称,并将相应的值作为 关键字(也叫“命名”)参数传递给 format —— 这样会让代码易读,正如你所看到的!!!

撰写回答