为什么Python小数的floordiv(//)运算符向0舍入而不是负无穷大?

问题描述 投票:0回答:1
>>> import decimal
>>> decimal.Decimal(-7) // 4
Decimal('-1') # Result rounded towards 0.
>>> -7 // 4
-2  # Result rounded towards negative infinity.
>>>

为什么带有Python小数的floordiv运算符向0舍入而不是向负无穷大舍入,就像floordiv运算符对所有其他类型所做的那样?

python
1个回答
0
投票

来自 BPO-12005(格式化我的):

decimal 模块所基于的规范要求存在具有 Decimal 的

%
运算语义的“余数”运算(即
x % y
的结果具有
x
的符号)。但是,该规范没有说明规定的操作应如何映射到语言结构。

因此,选择是(1)为

%
对象保留
Decimal
未实现,并提供单独的“余数”方法,或者(2)将
%
映射到
Decimal
的余数运算,并接受轻微的float 和 Decimal 的
%
语义不匹配。

也许做出了错误的选择。但它现在就在那里,对我来说,这并不是那么明显的错误,值得为

%
对象而弃用
Decimal
的剧变。

— 马克·迪金森(2011 年 5 月 5 日)

上面的帖子是关于

%
的,但这也适用于
//

© www.soinside.com 2019 - 2024. All rights reserved.