2015-04-16 8 views
7

Sto eseguendo la seguente query in Oracle 11g utilizzando Sql Developer.Perché resto (35,10) è -5 quando il resto (25,10) è 5 in oracolo?

SELECT remainder(25,10),remainder(35,10) FROM dual; 

uscita

REMAINDER(25,10)  REMAINDER(35,10)  
---------------------- ---------------------- 
5      -5      

posso usare MOD() per ottenere il risultato desiderato, ma la mia domanda è per questo che sta tornando +5 per uno e -5 per gli altri?

risposta

7

Secondo la documentation, REMAINDER(m, n) è definito come

m - (n * X) dove X è il numero intero più vicino m/n

Apparentemente, Oracle applica "rotondo a anche" quando il risultato della divisione è a metà strada tra due numeri:

Per REMAINDER(25, 10), si ottiene

25/10 = 2.5 --> nearest integer is 2 (round to even) 
25 - (10 * 2) = 5 

Per REMAINDER(35, 10), si ottiene

35/10 = 3.5 --> nearest integer is 4 (round to even) 
35 - (10 * 4) = -5 
+0

ho capito, ma rotondo (2.5) e rotondo (3.5) stanno tornando 3, 4. e non v'è alcuna menzione di "round per addirittura" nella documentazione destra ? – Rajeev

+1

@Rajeev: la documentazione 10g di 'ROUND' lo menziona, la documentazione 11g in effetti non lo è: http://docs.oracle.com/cd/B19306_01/server.102/b14200/functions135.htm – Marvin

Problemi correlati