Frage

Die Dokumentation besagt:"Präzision kann im Bereich von 1 bis 38.Skalierung kann im Bereich von -84 bis 127".

Wie kann man den Maßstab größer sein als die Genauigkeit?Sollte nicht die Skala reicht von -38 38?

War es hilfreich?

Lösung

Die Frage könnte sein, warum nicht ?Versuchen Sie die folgenden SQL.

select cast(0.0001 as number(2,5)) num, 
       to_char(cast(0.0001 as number(2,5))) cnum,
       dump(cast(0.0001 as number(2,5))) dmp
  from dual

Was Sie sehen, ist, dass Sie können halten kleine zahlen ist die Art von Struktur Es ist möglicherweise nicht erforderlich, sehr oft, aber ich bin sicher, irgendwo gibt es jemanden, der Speicherung, sehr präzise, aber sehr kleinen zahlen.

Andere Tipps

Laut Oracle Dokumentation:

  

Scale kann größer sein als Präzision, am häufigsten, wenn ex Schreibweise verwendet wird (wobei Dezimalteil so groß sein kann). Als Maßstab größer als Präzision ist, gibt die Genauigkeit die maximale Anzahl von signifikanten Ziffern rechts von dem Dezimalkomma. Zum Beispiel wird eine Spalte als NUMBER(4,5) definiert erfordert eine Null für die erste Stelle nach dem Komma und Runden alle Werte über die fünfte Stelle nach dem Komma.

Hier ist, wie ich es sehe:

  • Wenn Precision größer als Maßstab (z NUMBER(8,5)), kein Problem, das ist einfach. Precision bedeutet die Anzahl wird insgesamt 8 Stellen haben, von denen 5 in dem Bruchteil sind (. →), so dass der ganzzahlige Teil (←). 3 Ziffern haben. Das ist einfach.
  • Wenn Sie, dass Precision sehen kleiner als Scale (z NUMBER(2, 5)) bedeutet dies, 3 Dinge:

    • Die Zahl wird keinen ganzzahligen Teil, nur Bruchteil. So ist die 0 in der Integer-Teil in den Berechnungen nicht gezählt wird, sagen Sie 0,12345 nicht 0,12345. In der Tat, wenn Sie nur 1 Stelle in dem Integer-Teil angeben, es wird immer einen Fehler zurück.
    • Die Scale stellt die Gesamtzahl der Stellen in dem Bruchteil, dass die Zahl haben wird. 5 in diesem Fall. So kann es 0,12345 oder 0,00098 aber nicht mehr als 5 Stellen insgesamt.
    • Der Bruchteil wird in 2 Teile geteilt, eine signifikante Anzahl und Nullen. Signifikante Zahlen werden durch Precision angegeben, und die minimale Anzahl von Nullen gleich (Scale - Precision). Beispiel:

    Hier wird die Nummer muss mindestens 3 Nullen in dem Bruchteil hat. gefolgt von zwei signifikanten Zahlen (könnte eine Null als auch haben). So 3 Nullen + 2 signifikante Anzahl = 5, die die Scale Zahl ist.

Kurz gesagt, wenn Sie zum Beispiel NUMBER(6,9) sehen, dies sagt uns, dass der Bruchteil 9 Stellen insgesamt haben wird, ausgehend von einer obligatorischen 3 Nullen und um 6 Ziffern.

Hier sind einige Beispiele:

SELECT CAST(.0000123 AS NUMBER(6,9)) FROM dual;   -- prints: 0.0000123; .000|012300
SELECT CAST(.000012345 AS NUMBER(6,9)) FROM dual; -- prints: 0.0000123; .000|012345
SELECT CAST(.123456 AS NUMBER(3,4)) FROM dual;    -- ERROR! must have a 1 zero (4-3=1)
SELECT CAST(.013579 AS NUMBER(3,4)) FROM dual;    -- prints: 0.0136; max 4 digits, .013579 rounded to .0136

Vielen Dank an alle für die Antworten. Es sieht aus wie die Genauigkeit die Anzahl der signifikanten Ziffern ist.

 select cast(0.000123 as number(2,5)) from dual

Ergebnisse in:

.00012

Wo

 select cast(0.00123 as number(2,5)) from dual

und

 select cast(0.000999 as number(2,5)) from dual

sowohl Ergebnis in:

ORA-01438: value larger than specified precision allowed for this column

das zweite eine durch Rundung.

Laut Oracle Dokumentation:

Scale kann größer sein als Präzision, am häufigsten, wenn e-Notation verwendet wird. Als Maßstab größer als Präzision ist, gibt die Genauigkeit die maximale Anzahl von signifikanten Ziffern rechts von dem Dezimalkomma. Zum Beispiel wird eine Spalte als NUMBER definiert (4,5) erfordert eine Null für die erste Stelle nach dem Komma und Runden alle Werte über die fünfte Stelle nach dem Komma.

Es ist gute Praxis, den Umfang und die Genauigkeit einer Festpunktzahl Spalte für zusätzliche Integritätsprüfung bei der Eingabe angeben. Festlegen von Umfang und Präzision nicht zwingt, alle Werte auf eine feste Länge. Wenn ein Wert die Genauigkeit überschreitet, dann kehrt Oracle einen Fehler. Wenn ein Wert der Waage überschreitet, dann Oracle rundet es.

Der Fall, in dem Maßstab größer als Präzision auf diese Weise zusammengefasst werden:

Die Anzahl der Stellen rechts vom Komma = Maßstab

Mindestanzahl von Nullen rechts von Dezimal = Scale - Precision

--this will work 
select cast(0.123456 as number(5,5)) from dual;

kehrt 0,12346

-- but this
select cast(0.123456 as number(2,5)) from dual;
--will return "ORA-1438 value too large".  
--It will not return err with at least 5-2 = 3 zeroes:
select cast(0.000123456 as number(2,5)) from dual;

kehrt 0,00012

-- and of course this will work too
select cast(0.0000123456 as number(2,5)) from dual;

Rückkehr 0,00001

Hmm, wie ich die Referenz der Präzision verstehen, ist die Anzahl der Ziffern.
maximum precision of 126 binary digits, which is roughly equivalent to 38 decimal digits

oracle Sie Typ NUMBER haben (Präzision, Skala), wo Präzision Gesamtzahl der Stellen und Maßstab ist die Anzahl der Ziffern rechts vom Dezimalpunkt. Scale kann weggelassen werden, aber es bedeutet Null. Die Präzision kann nicht angegeben werden (verwenden Sie das heißt NUMBER (*, 10)) - das bedeutet Gesamtzahl der Stellen wird je nach Bedarf, aber es gibt 10 Ziffern rechts

Wenn der Maßstab kleiner als Null ist, wird der Wert auf scale Stellen gerundet werden, um den Dezimalpunkt nach links.
Ich denke, dass, wenn Sie mehr Zahlen rechts vom Komma behalten, als es in der ganzen Zahl, diese Mittel so etwas wie ,00000000123456 sein kann, aber ich bin nicht 100% sicher.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top