Python 乘法结果为负零

Python 乘法结果为负零,python,Python,有人能告诉我为什么下面提到的代码的输出是负零吗 a*b=-0 这里的“a”是long类型,b是decimal类的对象……如果a=-28,b=0,那么Python文档的输出是-0: 有符号的零可以由 计算结果可能会出现下溢。他们保持 如果 已经进行了计算 更准确地说。自从他们 震级为零,包括正震级和负震级 负零被视为相等 他们的标志是信息性的 这说明了一切: 它非常接近于零,但在负的一面,这就是为什么会发生这种情况。对于有效为0但包含“额外”信息的结果,建议采用什么方法处理?如果我想在面向用户的

有人能告诉我为什么下面提到的代码的输出是负零吗

a*b=-0

这里的“a”是long类型,b是decimal类的对象……如果a=-28,b=0,那么Python文档的输出是-0:

有符号的零可以由 计算结果可能会出现下溢。他们保持 如果 已经进行了计算 更准确地说。自从他们 震级为零,包括正震级和负震级 负零被视为相等 他们的标志是信息性的

这说明了一切:


它非常接近于零,但在负的一面,这就是为什么会发生这种情况。

对于有效为0但包含“额外”信息的结果,建议采用什么方法处理?如果我想在面向用户的应用程序中使用这些output@Bodhi,我不太明白你的意思。如果您询问要向用户提供什么信息,恐怕只有您可以决定。但您可能会问,如何以不需要解析字符串表示的方式获取信息?为此,
as_tuple
方法很好:
repr(decimal.decimal('-0').as_tuple())
输出
'DecimalTuple(sign=1,digits=(0,),index=0)
,其中
DecimalTuple
是一个自定义的
命名的tuple
。对于正的
Decimal
对象,
sign=0
;对于负数,
符号=1
。所以
decimal.decimal('-0')。作为tuple().sign==1
。嗯,没有…OP指定这是
long
decimal.decimal
。这里没有浮点问题,结果也不是非常接近于零,它是零,但带有负号。