2011-02-27 75 views
3

有人可以告诉我为什么下面提到的代码的输出是负的零?乘法结果为负零

A * B = -0

这里 'a' 是长型的,b为十进制类的对象.....和如果α= -28和b = 0,则输出为-0

回答

7

从Python decimal文档:可导致 计算下溢

签署的零。他们保留 的标志,如果 计算已执行 将导致更高的精度。由于它们的数量级为零,所以正数和负数零被视为等于 ,并且它们的符号是信息性的。

+0

推荐的方式是处理这样的结果,这些结果实际上是0,但有这些“额外”信息?就像我想在面向用户的输出 – Bodhi 2012-09-18 22:18:46

+0

@Bodhi中使用这些,我不太清楚你的意思。如果你问什么信息提供给用户,恐怕只有你可以决定。但是也许你在问如何以不需要解析字符串表示的方式获取信息?为此,'as_tuple'方法很好:'repr(decimal.Decimal(' - 0')。as_tuple())'outputs''DecimalTuple(sign = 1,digits =(0,),exponent = 0') ',其中'DecimalTuple'是一个自定义'namedtuple'。对于正数'Decimal'对象,'sign = 0';为负数,'sign = 1'。所以'decimal.Decimal(' - 0')。as_tuple()。sign == 1'。 – senderle 2012-09-18 23:32:57