Ter*_*ell 9 python floating-point decimal rounding python-3.x
当使用 python 中的内置十进制模块时,我可以按如下方式四舍五入小数。
Decimal(50.212345).quantize(Decimal('0.01'))
> Decimal('50.21')
Run Code Online (Sandbox Code Playgroud)
但我也可以使用内置的舍入函数对相同的数字进行舍入
round(Decimal(50.212345), 2)
> Decimal('50.21')
Run Code Online (Sandbox Code Playgroud)
在对小数进行四舍五入时,为什么要使用其中之一而不是另一个?在之前关于小数舍入的答案中,用户建议使用 quantize,因为内置的 round 函数将返回 float 类型的值。根据我的测试,它们都返回十进制。除了语法之外,还有选择其中之一的理由吗?
Tim*_*ers 12
返回类型并不总是相同。round()与单个参数一起使用实际上返回一个int:
>>> round(5.3)
5
>>> round(decimal.Decimal("5.3"))
5
Run Code Online (Sandbox Code Playgroud)
其他的就看你自己了。quantize()如果您希望将 deoimal 舍入到与您已有的另一个小数“相同”的精度,则特别方便。
>>> x = decimal.Decimal("123.456")
>>> x*x
Decimal('15241.383936')
>>> (x*x).quantize(x)
Decimal('15241.384')
Run Code Online (Sandbox Code Playgroud)
看?执行此操作的代码不必知道x小数点后最初有 3 位数字。只要传递xto 就会quantize()强制函数舍入到与原始精度相同的精度x,无论它是什么。
quantize()如果您想使用除默认的最接近/偶数之外的舍入模式,也是必要的。
>>> (x*x).quantize(x, decimal.ROUND_FLOOR)
Decimal('15241.383')
Run Code Online (Sandbox Code Playgroud)