float和Decimal的模数和整数除法的不同结果

Ari*_*ury 8 python python-3.x

我对行为很困惑,如下所示:

>>> (-7) % 3 
2
>>> Decimal('-7') % Decimal('3') 
Decimal('-1')
>>> 

>>> (-7) // 3
-3
>>> Decimal('-7') // Decimal('3') 
Decimal('-2')
>>>
Run Code Online (Sandbox Code Playgroud)

有人可以解释一下吗?

vau*_*tah 5

引用decimal文档:

算术对十进制对象和算术对整数和浮点数有一些小的差别.当余数运算符% 应用于Decimal对象时,结果的符号是被除数的符号,而不是除数的符号:

>>> (-7) % 4
1
>>> Decimal(-7) % Decimal(4)
Decimal('-3')
Run Code Online (Sandbox Code Playgroud)

整数除法运算符//表现类似,返回真商的整数部分(截断为零)而不是其底限,以便保留通常的标识x ==(x // y)*y + x%y:

>>> -7 // 4
-2
>>> Decimal(-7) // Decimal(4)
Decimal('-1')
Run Code Online (Sandbox Code Playgroud)