2009-07-06 10 views
5

Im Allgemeinen in der Programmierung sollten die Gleitkomma-Datentypen nicht auf Gleichheit verglichen werden, da die gespeicherten Werte sehr oft eine Annäherung sind.Oracle NUMBER Comparison

Können zwei nicht ganzzahlige Oracle NUMBER-Werte zuverlässig auf Gleichheit verglichen werden, da sie unterschiedlich gespeichert sind (Basis-10)?

Antwort

5

Ja, Oracle NUMBER Typen sind präzise. Sie sind eher Ganzzahlen mit einer Skala als Float/Double-Typen. Also eine NUMMER (10,3) hat 10 Ziffern, 3 nach dem Komma, was wirklich eine 10-stellige ganze Zahl mit einer Skala von 3 ist. Genau genommen ist das genau, wie Java BigDecimals funktionieren (ein BigInteger plus eine Skala intern).

+0

ein Dokument verfügbar? –

+0

http://download.oracle.com/docs/cd/B19306_01/server.102/b14220/datatype.htm#i16209 – cletus

+0

Nein, sie sind nicht präzise. – Quassnoi

2

Oracle NUMBER Typen werden als Sätze von Centesimalziffern gespeichert (dh base 100, nicht base 10), eine Ziffer pro Byte.

Das erste Byte steht für den Exponenten, die anderen Bytes für die Mantisse.

Die für extrem große Zahl bedeutet, daß sogar die ganzen Zahlen gerundet werden können:

SELECT 10000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 - 
     10000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001 
FROM dual 


--- 
0 
0

Oracle garantiert 38 Stellen an Präzision in einer Zahl, obwohl 40 dargestellt werden kann. Eine Referenz finden Sie unter Oracle Concepts.