为什么在oracle中剩余部分(25,10)为5时,余数(35,10)为-5?

Raj*_*eev 7 sql oracle rounding oracle11g

我正在使用Sql Developer在oracle 11g中运行以下查询.

SELECT remainder(25,10),remainder(35,10) FROM dual;
Run Code Online (Sandbox Code Playgroud)

产量

REMAINDER(25,10)       REMAINDER(35,10)       
---------------------- ---------------------- 
5                      -5                     
Run Code Online (Sandbox Code Playgroud)

我可以使用MOD()来获得所需的结果,但我的问题是为什么它返回+5为1而-5为其他?

pas*_*ein 7

根据文档,REMAINDER(m, n)定义为

m - (n*X)其中X是最接近m/n的整数

显然,当分割的结果在两个数字的中间时,Oracle应用"round to even":

因为REMAINDER(25, 10),你得到

25 / 10 = 2.5 --> nearest integer is 2 (round to even)
25 - (10 * 2) = 5
Run Code Online (Sandbox Code Playgroud)

因为REMAINDER(35, 10),你得到

35 / 10 = 3.5 --> nearest integer is 4 (round to even)
35 - (10 * 4) = -5
Run Code Online (Sandbox Code Playgroud)