【发布时间】:2017-05-28 06:28:17
【问题描述】:
根据剩余(n2,n1) 函数 (https://docs.oracle.com/cd/B19306_01/server.102/b14200/functions133.htm) 的 Oracle 文档,剩余(n2,n1) 函数的计算结果为 = n2 - n1 * N 其中 N = ROUND(n2/n1) 和 n1 ! = 0。
所以,我希望使用上面记录的计算余数的方法返回 -2,如下所示:
REMAINDER(10,4)
=10 - 4 * N where N = ROUND(10/4)
=10 - 4 * 3 since ROUND(10/4) = 3
=10 - 12
=-2
但是,在 Oracle 10g、11g 和 12c 中运行剩余 (10,4) 会返回 2 而不是 -2。
有人可以解释一下为什么没有按照 oracle 如何评估余数的记录方法评估余数(10,4)吗?
附加信息:每隔一个 n2 就会发生这种行为,其中 n2 是 n1 / 2 的倍数。可以通过运行以下 SQL 来验证,其中每个余数函数值应与其旁边的值匹配。但它只匹配 n2 的所有其他值。 运行 SQL:
select
remainder(2,4), 2-4*round(2/4),--OUTPUT:2, -2
remainder(6,4),6-4*round(6/4), --OUTPUT: -2, -2
remainder(10,4),10-4*round(10/4),--OUTPUT: 2, -2
remainder(14,4),14-4*round(14/4)--OUTPUT: -2, -2
from dual
【问题讨论】:
-
显然
ROUND(2.5)在直接调用时返回 3,但是在REMAINDER函数中进行的任何舍入都会导致ROUND(2.5)的结果为 2。您可能想查看 @987654327 @函数。 -
@BobJarvis - 不知道“显然”是什么意思。如果您从未与 Oracle 合作过,请让其他人发表意见。
Round(10/4)在 Oracle 中是3。 -
我每天都在使用 Oracle。虽然
ROUND(2.5)可能会返回 3(正如它所明确的那样),但请解释为什么REMAINDER(10,4)是 2 而不是 -2。谢谢。
标签: oracle oracle11g oracle10g oracle12c