Oracle
 sql >> Datenbank >  >> RDS >> Oracle

Verstehen des Verhaltens der Funktion rest() in Oracle

Die Leute, die die Dokumentation geschrieben haben (die sich anscheinend nicht an einige Definitionen aus der Arithmetik erinnern), scheinen selbst unsicher zu sein, was sie geschrieben haben. Einerseits wird am Anfang der Erklärung ROUND erwähnt - noch später, wenn sie eine formellere Definition geben, sagen sie

"Ganzzahl am nächsten" ist in der Arithmetik nicht formal definiert, und tatsächlich ist es erlaubt, diesen Namen für Runde (x) zu verwenden, außer wenn der Bruchteil von x genau 0,5 ist, in diesem Fall ist "ganzzahl am nächsten" mehrdeutig und man kann es wählen Verwenden Sie „Abrunden“ als eigene Definition von „Ganzzahl am nächsten.“

Ärgern Sie sich nach Möglichkeit nicht über solche Ungereimtheiten in der Dokumentation. Sie werden noch viele weitere sehen.

Allerdings :VIEL schlimmer ist, dass das Verhalten inkonsistent ist. Ich verwende Oracle 12.1 und auf meinem Computer habe ich es gerade versucht und bekomme

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

Kein Reim oder Grund. Viel besser ist es, Ihre eigene Division mit FLOOR und so zu machen.

Bearbeiten - Oder vielleicht gibt es einen Grund; vielleicht verwenden sie eine Definition von „nächster Ganzzahl“, um im Fall eines Gleichstands die nächste gerade zu meinen ganze Zahl. Produziert immer noch unerwartete Ergebnisse, verwenden Sie am besten nicht die REMAINDER()-Funktion von Oracle.