Exakt decimalräkning är ett stort och komplext ämne.
Googla på "mike colishaw decimal rounding" om du vill läsa ahem Oracle om ämnet.
I grund och botten finns det många avrundningsscheman som är möjliga:-
Runda ner allt - standarden i de flesta språk inklusive C eftersom Oracle är skrivet i C, det är förmodligen därför de gör detta.
Runda allt - sällan sett men behöver ibland implementeras på grund av oklara marknads- och skatteregler.
Grundläggande halvavrundning - allt över 0,5 avrundar uppåt allt annat avrundas nedåt.
Generös halvavrundning - allt under 0,5 avrundningar ner allt annat avrundas uppåt.
Bankers avrundning - Jämna nummer följer den grundläggande halvavrundningsregeln, udda nummer regeln för generös halvavrundning. Detta ses sällan i faktiska banker som föredrar att avrunda uppåt om pengarna kommer deras väg och avrunda nedåt när det går kundens väg.
ORACLE NUMBER är faktiskt en ganska bra decimal aritmatisk implementering och är korrekt så långt det går.