如何将Python十进制舍入到2位小数?

kra*_*r65 0 python floating-point decimal rounding floating-point-precision

我有一个python十进制(货币金额),我想要舍入到两位小数.我尝试使用常规round()函数执行此操作.不幸的是,这会返回一个浮点数,这使得继续执行以下操作变得不可靠:

>>> from decimal import Decimal
>>> a = Decimal('1.23456789')
>>> type(round(a, 2))
<type 'float'>
Run Code Online (Sandbox Code Playgroud)

在十进制模块中,我看到了与舍入有关的一些事情:

  • ROUND_05UP
  • ROUND_CEILING
  • ROUND_DOWN
  • ROUND_FLOOR
  • ROUND_HALF_DOWN
  • ROUND_HALF_EVEN
  • ROUND_HALF_UP
  • 围捕
  • 圆角

我认为这些都没有实际给出我想要的东西(或者我错了吗?).

所以我的问题:有没有人知道我如何可靠地将Python Decimal舍入到2位小数,这样我才能继续使用Decimal?欢迎所有提示!

eri*_*cbn 18

从 Python 3.3 开始,你可以使用round()a Decimal,它会返回 a Decimal

>>> from decimal import Decimal
>>> round(Decimal('3.14159265359'), 3)
Decimal('3.142')
Run Code Online (Sandbox Code Playgroud)

请参阅此答案中的详细信息。


Tim*_*ker 8

你可以使用这个quantize()方法:

>>> import decimal
>>> decimal.getcontext().prec = 20
>>> a = decimal.Decimal(321.12345)
>>> a
Decimal('321.12344999999999117790139280259609222412109375')
>>> TWO_PLACES = decimal.Decimal("0.01")
>>> a.quantize(TWO_PLACES)
Decimal('321.12')
Run Code Online (Sandbox Code Playgroud)

  • 请注意,在较新版本的 Python 中,您可以使用内置的“round()”,因为四舍五入现在返回一个 Decimal(如果提供了其中之一)。 (4认同)

Bat*_*rum 7

你尝试的第一个对我来说效果很好。

import decimal

type(round(decimal.Decimal('1.23456789'),2))
Run Code Online (Sandbox Code Playgroud)

<class 'decimal.Decimal'>