在python中的点后将浮点数舍入为2位数字

新手上路,请多包涵

我正在使用这段代码:

 f = 0.3223322
float('%.2f' % (f))

没有 2 次转换,是否有更多 pythonic、更简洁的方法?文档中的以下注释不鼓励使用 round

round() 对浮点数的行为可能令人惊讶:例如,round(2.675, 2) 给出 2.67 而不是预期的 2.68。这不是错误:这是大多数小数不能精确表示为浮点数这一事实的结果。有关详细信息,请参阅浮点运算:问题和限制。

原文由 rok 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 345
2 个回答

round(number[, ndigits])

 >>> round(0.3223322, 2)
0.32

请注意,由于浮点不精确,您在生成输出时可能仍希望使用一定精度的字符串格式。

根据您要实现的目标,使用 Decimal 类型可能是合适的:

 >>> from decimal import Decimal
>>> round(Decimal(0.3223322), 2)
Decimal('0.32')

它以(惊喜!)十进制而不是二进制进行数学计算,因此不会遇到任何十进制舍入问题(最初如果您尝试从浮点数创建它除外)。

原文由 Ry- 发布,翻译遵循 CC BY-SA 3.0 许可协议

这不是很好,但我总是喜欢:

 f=float(int(100*f))/100

远非最好的方法,但这是我经常使用的方法。

原文由 Henry 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题