使用量化的舍入小数与内置的舍入函数有什么区别?
What is the difference between rounding Decimals with quantize vs the built in round function?
在 python 中使用内置的 decimal 模块时,我可以按如下方式舍入小数。
Decimal(50.212345).quantize(Decimal('0.01'))
> Decimal('50.21')
但我也可以使用内置的舍入函数舍入相同的数字
round(Decimal(50.212345), 2)
> Decimal('50.21')
为什么我在四舍五入小数时使用一个而不是另一个?在之前关于舍入小数的回答中,用户建议使用量化,因为内置的舍入函数会 return 一个浮点类型的值。根据我的测试,这些都是 return 十进制。除了语法之外,是否还有其他选择的理由?
return 类型并不总是 相同。 round()
与单个参数一起使用实际上是 return 一个 int
:
>>> round(5.3)
5
>>> round(decimal.Decimal("5.3"))
5
除此之外,适合自己。 quantize()
如果你想要一个 deoimal 四舍五入到与你已经拥有的另一个小数“相同”的精度,那么 quantize()
特别方便。
>>> x = decimal.Decimal("123.456")
>>> x*x
Decimal('15241.383936')
>>> (x*x).quantize(x)
Decimal('15241.384')
看到了吗?执行此操作的代码不必知道 x
最初在小数点后有 3 位数字。只需将 x
传递给 quantize()
就会强制函数舍入到与原始 x
相同的精度,而不管它可能是什么。
quantize()
如果您想使用默认 nearest/even 以外的舍入模式,quantize()
也是必需的。
>>> (x*x).quantize(x, decimal.ROUND_FLOOR)
Decimal('15241.383')
在 python 中使用内置的 decimal 模块时,我可以按如下方式舍入小数。
Decimal(50.212345).quantize(Decimal('0.01'))
> Decimal('50.21')
但我也可以使用内置的舍入函数舍入相同的数字
round(Decimal(50.212345), 2)
> Decimal('50.21')
为什么我在四舍五入小数时使用一个而不是另一个?在之前关于舍入小数的回答中,用户建议使用量化,因为内置的舍入函数会 return 一个浮点类型的值。根据我的测试,这些都是 return 十进制。除了语法之外,是否还有其他选择的理由?
return 类型并不总是 相同。 round()
与单个参数一起使用实际上是 return 一个 int
:
>>> round(5.3)
5
>>> round(decimal.Decimal("5.3"))
5
除此之外,适合自己。 quantize()
如果你想要一个 deoimal 四舍五入到与你已经拥有的另一个小数“相同”的精度,那么 quantize()
特别方便。
>>> x = decimal.Decimal("123.456")
>>> x*x
Decimal('15241.383936')
>>> (x*x).quantize(x)
Decimal('15241.384')
看到了吗?执行此操作的代码不必知道 x
最初在小数点后有 3 位数字。只需将 x
传递给 quantize()
就会强制函数舍入到与原始 x
相同的精度,而不管它可能是什么。
quantize()
如果您想使用默认 nearest/even 以外的舍入模式,quantize()
也是必需的。
>>> (x*x).quantize(x, decimal.ROUND_FLOOR)
Decimal('15241.383')