2015-04-16 28 views
7

Sql Developer'ı kullanarak oracle 11g'de aşağıdaki sorguyu çalıştırıyorum. diğer bir numara almak için +5 ve -5 dönüyor nedenNeden geri kalan (35,10) -5 oracle'de kalan (25,10) 5 iken?

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

Çıktı

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

Ben MOD kullanabilirsiniz() istenen sonucu elde etmek için, ama benim soru nedir?

cevap

7

documentation göre, REMAINDER(m, n)

m olarak tanımlanmıştır - X, m, en yakın tam sayı olduğu (n * X)/n Görünüşe

Oracle geçerli "yuvarlak bile" bölünme sonucu iki sayı arasındaki çizginin olduğunda: REMAINDER(25, 10) için

elde edersiniz

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

REMAINDER(35, 10) için,

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

almak ben bunu anladım, ama 3, 4. dönüyor (3.5) (2.5) yuvarlak ve yuvarlak Ve dokümantasyon sağ "yuvarlak bile" hiç söz yoktur ? – Rajeev

+1

@Rajeev: "ROUND" un 10g dokümantasyonu bunu ifade ediyor, 11g belgelerinde gerçekten yok: http://docs.oracle.com/cd/B19306_01/server.102/b14200/functions135.htm – Marvin

İlgili konular