为什么 Ruby 和 Python 中的 -1 / 2 == -1?

Why is -1 / 2 == -1 in Ruby and Python?

1/2 实际上在两种语言中都是 0,因为它是整数除法。

人们会期望 -1/2 的结果也为 0。但是是-1! 在 Java、Scala 或 C++ 等其他语言中,它应该是 0。 Ruby 和 Python 中发生了什么,为什么?

这是为所有整数xy != 0保留(x / y) * y + (x % y) == x的同一性;这就是 x % yx 除以 y 的余数的意思。

在 Java 中,整数除法向零舍入,但这意味着余数运算符 % 可以给出负结果,这对大多数用途来说是不方便的。例如,当 i 为负数时,表达式 arr[i % arr.length] 不能保证数组索引有效。

在Python中,如果y为正则x % y总是给出non-negative结果(范围从0y - 1),因此为了保留“余数”属性,整数除法必须始终向下取整,不一定向零取整。

在做整数运算的时候,基本上都是做floor运算,或者说向下取整。 所以:

1/2 == 0.5 # rounds down to 0

但是

-1/2 == -0.5 # which rounds down to -1

如果您希望结果等于 0,您可以运行以下操作:

int(-1/2)