Java:为什么7/-3是-2?

rom*_*-v1 4 java division

为什么java 7/-3不是-3?它是-2.我在想分裂的结果是四舍五入的.在python 2中它是-3.java中有除法的其他规则吗?

Jon*_*eet 14

java中有除法的其他规则吗?

与往常一样,对于这样的问题,您应该转到Java语言规范.在这种情况下,相关部分是15.17.2:

整数除法向0 舍入.也就是说,为操作数生成的商nd二进制数字提升后的整数(第5.6.2节)是一个整数值,q其满足时的幅度尽可能大|d ? q| ? |n|.此外,当|n| ? |d|nd具有相同符号时q为正,q但当|n| ? |d|n和d具有相反符号时为q.

请注意,这种"舍入"不是您可能预期的"中点舍入":例如,-99/50是-1.实际上它被截断为0.

至于为什么Java选择使用这种方法而Python选择向下舍入,那么你可能需要问语言设计师.每种选择在某些情况下都很有用,而在其他情况下则很痛苦 您可能会发现余数运算符在Python中的工作方式也不同 - 这两个决策通常是相互关联的,因此(来自第15.17.3节):

二进制数字提升(第5.6.2节)后整数操作数的余数运算产生的结果值(a/b)*b+(a%b)等于a.