你可以想象 ruby 中的整数除法是这样实现的 --
给定a 和b,ruby 找到q b + m = a 的整数解,这样
-
m 与 b 的符号相同
-
m 的值尽可能小(接近于零)。
这两条规则为您提供q (a / b) 和m (a % b) 的独特解决方案。
在您的第一种情况下,a 是 14200,b 是 3600。遵循这些规则的 q b + m = a 的唯一解是 q = 3 和 m = 1600——试试吧。
> 3 * 3600 + 1600
# => 12400
这是唯一的解决方案吗? q = 4 呢?那么
4 * 3600 + m = 12400
m = -2000
不……m 现在不仅比以前更大,而且甚至是错误的符号(还记得第一条规则吗?)
q = 2 呢?
2 * 3600 + m = 12400
m = 5200
不...我们为m 提供的第一个解决方案更小。因此,q 和 m 的唯一可能值是 3 和 1600。
现在让我们试试你的第二种情况——a 是 -12400,b 是 3600。唯一的解决方案是q = -4 和b = 2000。
让我们检查一下。
> -4 * 3600 + 2000
# => -12400
有效!
让我们快速检查q 的其他值——让我们试试 -3,如果我们与第一个示例相比,“显而易见”的答案:
-3 * 3600 + m = -12400
m = -1600
好的...好吧,m 这里比以前“更小”了...所以它符合规则 #2。但是规则 #1 说 m 必须与 b 具有相同的符号......所以我们不会接受 m 的负值。
因此,唯一独特的解决方案是q = -4 和m = 2000。
您问题中的其他两个部门应该从这里清楚。
为了获得您预期的结果,您应该使用-3600 而不是3600 作为您的小时分红。