如何解决为什么在Ruby和Python中为-1 / 2 == -1?
1/2
实际上是两种语言所期望的0
,因为它是整数除法。
人们也希望-1/2
的结果也为0。但这是-1
!
在其他语言(如Java,Scala或C ++)中,它应为0
。
在Ruby和Python中会发生什么,为什么?
解决方法
这是为了保留(x / y) * y + (x % y) == x
对所有整数x
和y != 0
的身份;当x % y
除以x
时,y
就是余数。
在Java中,整数除法四舍五入为零,但这意味着余数运算符%
会给出负结果,这在大多数情况下都不方便。例如,当arr[i % arr.length]
为负数时,表达式i
不能保证有效的数组索引。
在Python中,如果y
为正,则x % y
总是给出非负结果(范围从0
到y - 1
),因此要保留“剩余”属性,整数除法必须始终四舍五入,不一定要取整为零。
进行整数数学运算时,基本上会进行下限运算或四舍五入。 所以:
1/2 == 0.5 # rounds down to 0
但是
-1/2 == -0.5 # which rounds down to -1
如果您希望结果等于0,则可以运行以下命令:
int(-1/2)
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。