有没有办法确保Decimal('0)次返回实际为0?

lud*_*fet 2 python decimal python-3.x

使用python 3.4.3或python 3.5.1我很惊讶地看到:

from decimal import Decimal
Decimal('0') * Decimal('123.456789123456')
Run Code Online (Sandbox Code Playgroud)

收益:

Decimal('0E-12')
Run Code Online (Sandbox Code Playgroud)

更糟糕的是,这个特定的用例适用于float.

有什么我可以做的,以确保数学工作,0乘以任何返回0?

Sha*_*ger 6

0E-12实际上是0(它的缩写0 * 10 ** -12;因为系数是0,它仍然是0),Decimal只提供E-12指示"置信水平"的位0.你所拥有的将仍然表现为零(它是虚假的,附加的身份等),唯一的怪癖就是如何打印.

如果你需要格式化匹配,你可以使用格式化迷你语言,或者你可以调用.normalize()结果,这将Decimal('0E-12')变成Decimal('0')(该方法的目的是从结果中去除尾随零,以产生一个代表所有相等的最小规范形式以同样的方式编号).