Bonjour,
Dans une fonction plpgsql lorsque je fais une division comme 10/100 j'obtiens 0 et non 0.1
Ma variable est pourtant de type numeric
Cordialement
Version imprimable
Bonjour,
Dans une fonction plpgsql lorsque je fais une division comme 10/100 j'obtiens 0 et non 0.1
Ma variable est pourtant de type numeric
Cordialement
NUMERIC avec quelle précision ?
SQL est un langage fortement typé. Si vous avez mis du NUMERIC de précision 0, cela revient à de l'entier.
A +
j'ai essayé avec numeric(4,2)
Cordialement
donne 0.1000000000Code:SELECT CAST(10 AS NUMERIC(10,2))/CAST(100 AS NUMERIC(10,2))
Vous avez donc mal essayé !
A +
Effectivement NUMERIC(4,2) provoque une erreur.
Merci bien !
En NUMERIC (4,2) 100 ne passe pas !
A +
si j'essaie cela :
J'obtiens ceci :Code:SELECT CAST(10 AS NUMERIC(4,2))/CAST(100 AS NUMERIC(4,2))
ERROR: numeric field overflow
DETAIL: The absolute value is greater than or equal to 10^2 for field with precision 4, scale 2.
Cordialement
Extrait de la doc Postgresql :
NUMERIC (4,2) signifie donc 4 chiffres au total dont 2 après la virgule.Citation:
l'échelle d'un numeric est le nombre de chiffres décimaux de la partie fractionnaire, à droite du séparateur de décimales. La précision d'un numeric est le nombre total de chiffres significatifs dans le nombre complet, c'est-à-dire le nombre de chiffres de part et d'autre du séparateur. Donc, le nombre 23.5141 a une précision de 6 et une échelle de 4. On peut considérer que les entiers ont une échelle de 0. La précision maximale et l'échelle maximale d'une colonne numeric peuvent être toutes deux réglées. Pour déclarer une colonne de type numérique, il faut utiliser la syntaxe :
NUMERIC(précision, échelle)
100 est l'équivalent de 100,00 donc 5 chiffres au total dont 2 après la virgule.
Voilà pourquoi tu as ce message d'erreur.
Effectivement !
Merci bien !