我有一个python十进制(货币金额)我想要舍入到两位小数。我尝试使用常规round()函数执行此操作。不幸的是,这会返回一个浮点数,这使得继续使用它不可靠:
>>> from decimal import Decimal
>>> a = Decimal('1.23456789')
>>> type(round(a, 2))
<type 'float'>
在十进制模块中,我看到了与舍入有关的一些事情:
我认为这些都没有实际给出我想要的东西(或者我错了吗?)。
所以我的问题:有没有人知道我如何可靠地将Python Decimal舍入到2位小数,这样我才能继续使用Decimal?欢迎所有提示!
答案 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'>