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)
在十进制模块中,我看到了与舍入有关的一些事情:
我认为这些都没有实际给出我想要的东西(或者我错了吗?).
所以我的问题:有没有人知道我如何可靠地将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)
请参阅此答案中的详细信息。
你可以使用这个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)
你尝试的第一个对我来说效果很好。
import decimal
type(round(decimal.Decimal('1.23456789'),2))
Run Code Online (Sandbox Code Playgroud)
<class 'decimal.Decimal'>