Volgens Oracle-documentatie:
Zo zie ik het:
- Wanneer
Precision
is groter dan Schaal (bijv.NUMBER(8,5)
), geen probleem, dit is eenvoudig.Precision
betekent dat het getal in totaal 8 cijfers zal hebben, waarvan 5 in het fractionele deel (.→), dus het gehele deel (←.) zal 3 cijfers hebben. Dit is gemakkelijk. -
Als je die
Precision
. ziet is kleiner danScale
(bijv.NUMBER(2, 5)
), betekent dit 3 dingen:- Het getal heeft geen geheel getal, alleen een breuk. Dus de 0 in het gehele deel wordt niet meegeteld in de berekeningen, je zegt .12345 en niet 0.12345. Als u slechts 1 cijfer opgeeft in het gehele getal, wordt er altijd een fout geretourneerd.
- De
Scale
staat voor het totale aantal cijfers in het fractionele deel dat het nummer zal hebben. 5 in dit geval. Het kan dus .12345 of .00098 zijn, maar in totaal niet meer dan 5 cijfers. - Het fractionele deel is verdeeld in 2 delen, significante getallen en nullen. Significante getallen worden gespecificeerd door
Precision
, en het minimum aantal nullen is gelijk aan (Scale
-Precision
). Voorbeeld:
hier Het getal moet minimaal 3 nullen hebben in het breukdeel. gevolgd door 2 significante getallen (kan ook een nul hebben). Dus 3 nullen + 2 significante getallen =5 wat de
Scale
. is nummer.
Kortom, wanneer u bijvoorbeeld NUMBER(6,9)
. ziet , dit vertelt ons dat het breukdeel in totaal 9 cijfers zal hebben, te beginnen met de verplichte 3 nullen en gevolgd door 6 cijfers.
Hier zijn enkele voorbeelden:
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