我正在使用此代码:
f = 0.3223322
float('%.2f' % (f))
没有2个铸件,是否有更多的pythonic,更简洁的方法? 使用round令人沮丧的是文档中的以下注释
浮点数的round()行为可能会令人惊讶:例如, round(2.675,2)给出2.67而不是预期的2.68。这不是一个 bug:这是大多数小数部分不能的结果 完全代表浮动。请参阅浮点算术:问题 和限制以获取更多信息。
答案 0 :(得分:3)
>>> round(0.3223322, 2)
0.32
请注意,由于浮点不精确,在生成输出时,您可能仍希望使用一定的字符串格式精度。
根据您要实现的目标,使用Decimal
类型可能是合适的:
>>> from decimal import Decimal
>>> round(Decimal(0.3223322), 2)
Decimal('0.32')
它的数学(惊讶!)十进制而不是二进制,因此不会出现十进制舍入的任何问题(除非你最初试图从浮点数创建它)。
答案 1 :(得分:2)
答案 2 :(得分:1)
这不是很好,但我总是喜欢:
f=float(int(100*f))/100
远非最好的方法,但我经常使用它。
答案 3 :(得分:0)
我和round()
一起去,但如果你不喜欢它的行为,你总是可以写自己的round()
所以,为了完整性:
def custom_round(number, ndigits=2):
return int(number * 10 ** ndigits) / 10.0 ** ndigits if ndigits else int(number)
请记住,这一轮不同于内置round()
向下舍入,而不是向上。
答案 4 :(得分:0)
您可以将 Decimal 与量化和舍入一起使用。 ROUND_HALF_UP 是数学四舍五入。
from decimal import Decimal, ROUND_HALF_UP
>>> Decimal('123.527').quantize(Decimal('.01'), rounding=ROUND_HALF_UP)
Decimal('123.53')
>>> Decimal('123.525').quantize(Decimal('.01'), rounding=ROUND_HALF_UP)
Decimal('123.53')