我看到为什么 -1/2 在 C++ 中被评估为 0,但在 Python 中被评估为 -1?表示 Python 中的整数除法向无穷大取整,即floor
应用于结果。
我认为在练习时int(value)
也会做类似的事情,这应该会在我的脑海中出现。floor
int(-1.5) == -1
-2
integer division
所以问题是:为什么规则和函数之间不一致int()
?有什么合理的解释吗?
我看到为什么 -1/2 在 C++ 中被评估为 0,但在 Python 中被评估为 -1?表示 Python 中的整数除法向无穷大取整,即floor
应用于结果。
我认为在练习时int(value)
也会做类似的事情,这应该会在我的脑海中出现。floor
int(-1.5) == -1
-2
integer division
所以问题是:为什么规则和函数之间不一致int()
?有什么合理的解释吗?
int()
删除小数部分;它不做任何舍入。从文档中:
如果 x 是浮点数,则转换将向零截断。
将 afloat
变成 aint
这完全是合乎逻辑的行为。这不是划分,地板或其他。
否则,//
地板除法运算符显然会做地板,而不是截断。在 Python 2 中,对于两个整数操作数,/
除法也是楼层。文档再次:
结果是数学除法,将“地板”函数应用于结果
其中math.floor()
记录为:
以浮点数形式返回x的下限,即小于或等于x的最大整数值。
我认为这里没有不一致之处;除法层,将浮点数转换为整数截断。
也许round()
withndigits = 0
更接近你的期望。但round()
不返回整数,而是浮点数:请参阅文档