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

时间:2014-05-10 16:03:44

标签: python floating-point decimal rounding floating-point-precision

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

>>> from decimal import Decimal
>>> a = Decimal('1.23456789')
>>> type(round(a, 2))
<type 'float'>

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

  • ROUND_05UP
  • ROUND_CEILING
  • ROUND_DOWN
  • ROUND_FLOOR
  • ROUND_HALF_DOWN
  • ROUND_HALF_EVEN
  • ROUND_HALF_UP
  • ROUND_UP
  • 圆角

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

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

4 个答案:

答案 0 :(得分:8)

您可以使用quantize() method

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

答案 1 :(得分:1)

如果您使用的是Jupyter Notebook,只需添加2个十进制的魔术函数%precision 2,等等。

但如果您的值不是float()类型,那么您可以使用以下内容:

 from decimal import getcontext, Decimal
 getcontext().prec = 2
 # for example, take integer value
 mynum = 2
 type(mynum) # Int
 print round(Decimal(mynum), 2) # 10.0

答案 2 :(得分:0)

我想到了这一点:

Decimal(str(round(a, 2)))

但我不知道它有多快。

答案 3 :(得分:0)

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

import decimal

type(round(decimal.Decimal('1.23456789'),2))
  

<class 'decimal.Decimal'>