sql >> Database teknologi >  >> RDS >> Oracle

Forstå opførsel af rest() funktion i Oracle

De personer, der skrev dokumentationen (som tilsyneladende ikke husker nogle definitioner fra aritmetikken) virker selv usikre på, hvad de skrev. På den ene side nævner de tidligt i forklaringen ROUND - men senere, når de giver en mere formel definition, siger de

"Nærmeste heltal" er ikke formelt defineret i aritmetikken, og det er faktisk tilladt at bruge dette navn til runde(x), undtagen når brøkdelen af ​​x er nøjagtigt 0,5, i hvilket tilfælde "heltal nærmest" er tvetydigt, og man kan vælge at bruge "runde ned" som deres egen definition af "heltal nærmest."

Bliv ikke for ked af sådanne uoverensstemmelser i dokumentationen, hvis du kan. Du vil se mange flere.

Men :Hvad der er MEGET værre er, at adfærden er inkonsekvent. Jeg bruger Oracle 12.1, og på min maskine har jeg lige prøvet, og jeg får

remainder(10, 4) =  2
remainder( 6, 4) = -2

Ingen rim eller grund. Meget bedre at lave din egen opdeling ved at bruge FLOOR og sådan noget.

Rediger - Eller måske er der en eller anden grund; måske bruger de en definition af "nærmeste heltal" til at betyde, i tilfælde af uafgjort, den nærmeste lige heltal. Producerer stadig uventede resultater. Det er bedst ikke at bruge Oracles REMAINDER()-funktion.




  1. Jeg har en insert into statement, men der er en fejl med et komma, og jeg kan bare ikke rette den

  2. Hvorfor får jeg ActionView::Template::Fejl:udefineret metode `navn' for nil:NilClass på Heroku, men ikke lokalt

  3. MySQL proxy-alternativer til databasedeling

  4. Forstå indekser i MySQL:Del 1