在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')