Oracle中的余数函数

时间:2018-01-09 05:52:28

标签: oracle

无法在oracle中获取remainder()函数。以下是输出的两个例子。请让我通过这些示例了解其背后的逻辑,以便我更好地理解。

select remainder(17,3) from dual; // output -1
select remainder(15,6) from dual; // output 3

特别是,为什么remainder(15,6)自圆(15/6)= 3后不返回-3

1 个答案:

答案 0 :(得分:1)

REMAINDER是一个相当奇怪的SQL函数,我自己从未使用它。

17 / 3 = 5.66666..
which rounds to 6
17 / 3 = 6 remainder -1

15 / 6 = 2.5
which is rounded to 2 (note: this is NOT using Oracle's default ROUND algorithm!)
15 / 6 = 2 remainder 3

Understanding behavior of remainder() function in Oracle

修改

根据Jonathan的评论,似乎正在使用round的binary_float / binary_double逻辑,它将舍入到最接近的偶数值。

select  9 / 6, remainder(9,6)
      ,15 / 6, remainder(15,6)
      ,21 / 6, remainder(21,6)
      ,27 / 6, remainder(27,6)
from dual;

1.5 -3
2.5  3
3.5 -3
4.5  3