量化器舍入小数与内置舍入函数的区别是什么



在python中使用内置的小数模块时,我可以按如下方式对小数进行舍入。

Decimal(50.212345).quantize(Decimal('0.01'))
> Decimal('50.21')

但我也可以使用内置的舍入函数对相同的数字进行舍入

round(Decimal(50.212345), 2)
> Decimal('50.21')

为什么我在舍入小数时要用一个而不是另一个?在之前关于舍入小数的回答中,用户建议使用quantize,因为内置的舍入函数将返回float类型的值。根据我的测试,这两个都返回一个Decimal。除了语法之外,有理由选择其中一个而不是另一个吗?

返回类型并不总是相同。与单个参数一起使用的round()实际上返回一个int:

>>> round(5.3)
5
>>> round(decimal.Decimal("5.3"))
5

除此之外,适合你自己。CCD_ 3特别方便,如果你想要一个圆角为"0"的去末端;相同的";精度与您已有的另一个十进制数相同。

>>> x = decimal.Decimal("123.456")
>>> x*x
Decimal('15241.383936')
>>> (x*x).quantize(x)
Decimal('15241.384')

看到了吗?执行此操作的代码不必知道x最初在小数点后有3位数字。只要将x传递给quantize(),就会迫使函数四舍五入到与原始x相同的精度,而不管这可能是什么

如果要使用除默认最接近/偶数之外的舍入模式,quantize()也是必要的。

>>> (x*x).quantize(x, decimal.ROUND_FLOOR)
Decimal('15241.383')

最新更新