Pb d'enrigistrement avec decimal()

Eléphant du PHP | 150 Messages

06 sept. 2007, 15:42

Bonjour à tous,

J'ai un problème avec une colonne de ma table MySQL lors de l'insertion de données.
Cette colonne a pour format decimal(4,2).

Lorsque j'insère un enregistrement avec deux décimales avant la virgule, ça va, sinon lorsque le nombre est supérieur à 100, l'enregistrement indique 99,99.

Quelqu'un sait-il ce qui peut clocher ?

Merci d'avance de votre aide.

ViPHP
ViPHP | 5924 Messages

06 sept. 2007, 16:30

LA DOC !!!
DECIMAL[(M[,D])] [UNSIGNED] [ZEROFILL]

Un nombre à virgule flottante littéral. Il se comporte comme une colonne de type CHAR: ``littéral'' (``unpacked'') signifie que le nombre est stocké sous forme de chaîne : chaque caractère représente un chiffre. La virgule décimale et le signe moins ‘-’ des nombres négatifs ne sont pas comptés dans M (mais de l'espace leur est réservé). Si D vaut 0, les valeurs n'auront pas de virgule décimale ou de partie décimale. L'intervale de validité du type DECIMAL est le même que DOUBLE, mais le vrai intervalle de validité de DECIMAL peut être restreint par le choix de la valeur de M et D. Si UNSIGNED est spécifié, les valeurs négatives sont interdites.

Si D est omis, la valeur par défaut est 0. Si M est omis, la valeur par défaut est 10.

Avant MySQL Version 3.23, l'argument M devait inclure l'espace nécessaire pour la virgule et le signe moins.
Ce qui veut dire que c'est un comportement totalement normal pour un champ decimal(4,2), il y a 4 digits au total, dont 2 digits pour la partie décimale, ce qui fait que le nombre maximal représentable est 99,99. Tous les nombres au dessus de 100 sont donc ramenés au maximum représentable, à savoir 99,99…

Eléphant du PHP | 150 Messages

06 sept. 2007, 20:09

Merci beaucoup Sékiltoyai. J'avais mal lu la doc.