我需要使用数学方法的理论答案。它们之间是否有任何数学差异以及它们如何在编程语言中产生影响。
根据Java术语,"截断划分"的问题VS"地板司"最好由RoundingMode
的Javadoc回答:
down
圆形模式到圆形朝零。切勿在丢弃的分数之前递增数字(即 Truncates (。请注意,这种舍入模式永远不会增加计算值的大小。地板
圆形模式到圆形朝向无穷大。如果结果为正,则表现为RoundingMode.DOWN
;如果负面,则表现为RoundingMode.UP
。请注意,这种舍入模式永远不会增加计算的值。
JAVA部门运营商由JLS§15.17.2定义。分区操作员/
:
整数部门向0。
这就是为什么5 / -3
在-1
中导致
您还可以查看"截断"的定义。VS"地板"在Wikipedia上:
有很多方法可以将数字
y
舍入到整数q
最常见的方法是:
圆下(或取 floor ,或圆形朝下to Minus nigus infinity (:
q
是不超过y
的最大整数。汇总(或以天花板或 round to Plus plus Infinity (:
q
是最小的整数不是小于y
。圆形朝零(或截断,或远离Infinity (:
q
是y
的整数,没有它的分数数字。远离零(或 round to Infinity (:如果
y
是整数,则q
为y
;否则q
是最接近0的整数,并且y
在0和q
之间。圆形到最近的:
q
是最接近y
的整数(有关打决规则,请参见下文(。
如您所见,Java和Wikipedia在此定义上同意:
- 在
- 地板:圆形倾向于减去/负
请注意,Java和Wikipedia在上不同意。 您正在划分整数,因此结果将四舍五入到最近的整数。改用浮点变量。 例如,问题的第二部分,1.0/2.0 = 0.5。