在python中点后圆形浮动到2位数

时间:2017-05-21 21:16:22

标签: python python-2.7 python-3.x

我正在使用此代码:

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

没有2个铸件,是否有更多的pythonic,更简洁的方法? 使用round令人沮丧的是文档中的以下注释

  

浮点数的round()行为可能会令人惊讶:例如,   round(2.675,2)给出2.67而不是预期的2.68。这不是一个   bug:这是大多数小数部分不能的结果   完全代表浮动。请参阅浮点算术:问题   和限制以获取更多信息。

5 个答案:

答案 0 :(得分:3)

round(number[, ndigits])

>>> round(0.3223322, 2)
0.32

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

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

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

它的数学(惊讶!)十进制而不是二进制,因此不会出现十进制舍入的任何问题(除非你最初试图从浮点数创建它)。

答案 1 :(得分:2)

好的旧的错误,内置于round()

像这样使用它:

round(input, digits)

示例输出:

>>> f = 0.3223322
>>> round(f, 2)
0.32

答案 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')