Python 2.7.1:
print -34 % 4 # outputs 2
Java 1.5.0:
System.out.println(-34 % 4); // outputs -2
哪一个是正确的?为什么会有差异?
wikipedia article on modulo上说:
当a或n中有一个为负数时,这个朴素的定义就会失效,编程语言在如何定义这些值上存在差异。
也许这不是一个适当的SO问题,可能会被删除,但我很想看到回复。
print -34 % 4 # outputs 2
System.out.println(-34 % 4); // outputs -2
哪一个是正确的?为什么会有差异?
wikipedia article on modulo上说:
当a或n中有一个为负数时,这个朴素的定义就会失效,编程语言在如何定义这些值上存在差异。
也许这不是一个适当的SO问题,可能会被删除,但我很想看到回复。
这只是语言选择的一种约定。没有一种选择比另一种更数学上正确。
Python的选择原因可以在源代码中找到提示: http://hg.python.org/cpython/file/2.7/Objects/intobject.c#l567
Python版本在数论中更常用。Java版本实现与C相同的行为。Python方式很方便,因为结果的符号始终与除数的符号相同。这意味着当n为正数时,x%n
始终给出0 <= result < n
的值。
这是因为两种语言的编程方式不同。
Java在应用模数(%)运算符时会考虑分子的符号,而Python则不会。
如果您在分母上写入“-”符号,即使是Java也会忽略它。