Selon la documentation Oracle :
Voici comment je le vois :
- Quand
Precision
est supérieur à l'échelle (par exempleNUMBER(8,5)
), pas de problème, c'est simple.Precision
signifie que le nombre aura un total de 8 chiffres, dont 5 sont dans la partie fractionnaire (.→), donc la partie entière (←.) aura 3 chiffres. C'est facile. -
Quand vous voyez cette
Precision
est inférieur àScale
(par exempleNUMBER(2, 5)
), cela signifie 3 choses :- Le nombre n'aura pas de partie entière, seulement une partie fractionnaire. Ainsi, le 0 dans la partie entière n'est pas compté dans les calculs, vous dites 0,12345 et non 0,12345. En fait, si vous ne spécifiez qu'un seul chiffre dans la partie entière, une erreur sera toujours renvoyée.
- L'
Scale
représente le nombre total de chiffres dans la partie fractionnaire que le nombre aura. 5 dans ce cas. Cela peut donc être .12345 ou .00098 mais pas plus de 5 chiffres au total. - La partie fractionnaire est divisée en 2 parties, les nombres significatifs et les zéros. Les nombres significatifs sont spécifiés par
Precision
, et le nombre minimum de zéros est égal à (Scale
-Precision
). Exemple :
ici Le nombre devra avoir un minimum de 3 zéros dans la partie fractionnaire. suivi de 2 nombres significatifs (peut également avoir un zéro). Donc 3 zéros + 2 nombres significatifs =5 qui est l'
Scale
numéro.
En bref, quand vous voyez par exemple NUMBER(6,9)
, cela nous indique que la partie fractionnaire aura 9 chiffres au total, commençant par 3 zéros obligatoires et suivis de 6 chiffres.
Voici quelques exemples :
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