Podle dokumentace Oracle:
Vidím to takto:
- Když je
Precision
je větší než Měřítko (např.NUMBER(8,5)
), žádný problém, to je jednoduché.Precision
znamená, že číslo bude mít celkem 8 číslic, z nichž 5 je ve zlomkové části (.→), takže celočíselná část (←.) bude mít 3 číslice. To je snadné. -
Když vidíte, že
Precision
je menší nežScale
(např.NUMBER(2, 5)
), to znamená 3 věci:- Číslo nebude mít žádnou celočíselnou část, pouze zlomkovou část. Takže 0 v celočíselné části se ve výpočtech nepočítá, říkáte 0,12345 ne 0,12345. Ve skutečnosti, pokud zadáte pouze 1 číslici v části celého čísla, vždy vrátí chybu.
Scale
představuje celkový počet číslic ve zlomkové části, kterou bude číslo mít. 5 v tomto případě. Může tedy být .12345 nebo .00098, ale celkem ne více než 5 číslic.- Zlomková část je rozdělena na 2 části, významná čísla a nuly. Významná čísla jsou určena
Precision
a minimální počet nul se rovná (Scale
-Precision
). Příklad :
zde Číslo musí mít ve zlomkové části minimálně 3 nuly. následují 2 platná čísla (může mít i nulu). Takže 3 nuly + 2 platná čísla =5, což je
Scale
číslo.
Stručně řečeno, když vidíte například NUMBER(6,9)
, to nám říká, že zlomková část bude mít celkem 9 číslic, počínaje povinnými 3 nulami a následovanými 6 číslicemi.
Zde je několik příkladů:
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