>>> import decimal
>>> decimal.Decimal(-7) // 4
Decimal('-1') # Result rounded towards 0.
>>> -7 // 4
-2 # Result rounded towards negative infinity.
>>>
为什么带有Python小数的floordiv运算符向0舍入而不是向负无穷大舍入,就像floordiv运算符对所有其他类型所做的那样?
来自 BPO-12005(格式化我的):
decimal 模块所基于的规范要求存在具有 Decimal 的
运算语义的“余数”运算(即%
的结果具有x % y
的符号)。但是,该规范没有说明规定的操作应如何映射到语言结构。x
因此,选择是(1)为
对象保留%
未实现,并提供单独的“余数”方法,或者(2)将Decimal
映射到%
的余数运算,并接受轻微的float 和 Decimal 的Decimal
语义不匹配。%
也许做出了错误的选择。但它现在就在那里,对我来说,这并不是那么明显的错误,值得为
对象而弃用%
的剧变。Decimal
— 马克·迪金森(2011 年 5 月 5 日)
上面的帖子是关于
%
的,但这也适用于//
。