Podle dokumentace Oracle:
Vidím to takto:
- Když je
Precisionje větší než Měřítko (např.NUMBER(8,5)), žádný problém, to je jednoduché.Precisionznamená, ž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
Precisionje 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.
Scalepř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
Precisiona 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
