2015-04-16 8 views
7

Ich führe folgende Abfrage in Oracle 11g mit Sql Developer.Warum ist der Rest (35,10) -5, wenn der Rest (25,10) 5 in Orakel ist?

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

Ausgabe

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

I MOD() verwenden, um das gewünschte Ergebnis zu erhalten, aber meine Frage ist, warum es 5 für einen und -5 für andere Rückkehr?

Antwort

7

Gemäß der documentation wird REMAINDER(m, n) definiert als

m - (n * X) wobei X die ganze Zahl nächsten m/n

Offenbar Oracle "rund um auch" gilt wenn das Ergebnis der Division auf halbem Weg zwischen zwei Zahlen:

Für REMAINDER(25, 10), erhalten Sie

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

Für REMAINDER(35, 10), erhalten Sie

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

i figured it out, aber rund (2,5) und rund (3.5) sind wieder 3, 4. Und es gibt keine Erwähnung "Runde sogar" in der Dokumentation rechts ? – Rajeev

+1

@Rajeev: Die 10g Dokumentation von 'ROUND' erwähnt es, 11g Dokumentation tatsächlich nicht: http://docs.oracle.com/cd/B19306_01/server.102/b14200/functions135.htm – Marvin

Verwandte Themen