99.99 en valeur décimal ?!

Eléphant du PHP | 120 Messages

24 juin 2010, 11:54

bonjour,
j'ai développé un site de gestion d'inscription avec de la vente en ligne, qui fonctionne depuis 5 ans maintenant sur la meme base.
mais je viens de m'apercevoir que certaines valeurs de la base de données avaient "changé" : je pense pouvoir dire que cette modification ne concernent que les valeurs à 3 chiffres (donc supérieur à 99) qui représente un prix de vente.
Ces valeurs sont déclarées en base de données MySQL comme des décimales de longueur (4,2).
On est bien d'accord que, du coup, ma valeur limite devrait etre 9999.99 non ?
Alors pourquoi les nombres à 2 chiffres dans ma base ne bougent pas (genre 40€) mais que les valeurs comme 128€ deviennent 99.99 ?

Je suis un peu perdu...merci de votre aide, ou d'une piste de réflexion...
si tu as un soucis en informatique, dis toi bien que quelqu'un d'autre l'a eu avant toi

Mammouth du PHP | 672 Messages

24 juin 2010, 12:04

Ces valeurs sont déclarées en base de données MySQL comme des décimales de longueur (4,2).
On est bien d'accord que, du coup, ma valeur limite devrait etre 9999.99 non ?
Je dirais plutôt que (4,2) c'est 4 chiffres dont 2 après la virgule...

Eléphant du PHP | 120 Messages

24 juin 2010, 12:14

gloups...ca veut dire qu'il me faut (5,2) au minimum donc...
si tu as un soucis en informatique, dis toi bien que quelqu'un d'autre l'a eu avant toi

Eléphant du PHP | 120 Messages

24 juin 2010, 12:30

heu..non...ya quand meme un soucis...
je viens de regarder mes dumps du mois de mars et j'ai bien :

Code : Tout sélectionner

DROP TABLE IF EXISTS `2010_adherents`; CREATE TABLE `2010_adherents` ( [...] `cb` decimal(4,2) NOT NULL default '0.00', `esp` decimal(4,2) NOT NULL default '0.00', `virement` decimal(4,2) NOT NULL default '0.00', `chq1` decimal(4,2) NOT NULL default '0.00', `chq2` decimal(4,2) NOT NULL default '0.00', `chq3` decimal(4,2) NOT NULL default '0.00', [...] PRIMARY KEY (`id`) ) ENGINE=MyISAM AUTO_INCREMENT=7345 DEFAULT CHARSET=latin1 COLLATE=latin1_general_ci;
et voila quelques lignes de données de cette table :

Code : Tout sélectionner

insert into `2010_adherents`([...],`cb`,`esp`,`virement`,`chq1`,`chq2`,`chq3`,[...]) values ([...],0.00,0.00,0.00,128.00,0.00,0.00,[...]), ([...],279.00,0.00,0.00,0.00,0.00,0.00,[...]), ([...],128.00,0.00,0.00,0.00,0.00,0.00,[...]), ([...],0.00,0.00,0.00,128.00,0.00,0.00,[...]), ([...],128.00,0.00,0.00,0.00,0.00,0.00,[...])
j'avais donc bien des valeurs décimals (4,2) avec des prix comme 128.00 ou 279.00

je ne comprends donc pas pourquoi, d'un coup, je me retrouve avec 99.99 à la place !
si tu as un soucis en informatique, dis toi bien que quelqu'un d'autre l'a eu avant toi

Mammouth du PHP | 672 Messages

25 juin 2010, 08:37

et voila quelques lignes de données de cette table :

Code : Tout sélectionner

insert into `2010_adherents`([...],`cb`,`esp`,`virement`,`chq1`,`chq2`,`chq3`,[...]) values ([...],0.00,0.00,0.00,128.00,0.00,0.00,[...]), ([...],279.00,0.00,0.00,0.00,0.00,0.00,[...]), ([...],128.00,0.00,0.00,0.00,0.00,0.00,[...]), ([...],0.00,0.00,0.00,128.00,0.00,0.00,[...]), ([...],128.00,0.00,0.00,0.00,0.00,0.00,[...])
j'avais donc bien des valeurs décimals (4,2) avec des prix comme 128.00 ou 279.00

je ne comprends donc pas pourquoi, d'un coup, je me retrouve avec 99.99 à la place !
Ce ne sont pas des données de la table, c'est ce que tu essaye d'insérer :mrgreen:

Je viens de vérifier avec phpMyAdmin :
Warning: #1264 Out of range value for column 'cb' at row 1
Il ne s'agit que d'un Warning, et du coup l'INSERT fonctionne bien mais insère la valeur plafond 99.99 au lieu d'insérer 123.45.

Du point de vue PHP, comme ce n'est qu'un Warning et que l'INSERT a quand-même lieu, ça ne génére pas d'erreur...

De toute façon, à moins d'avoir vraiment une grosse table (ou d'avoir des valeurs bien précises), il vaut mieux se laisser une bonne marge.

Eléphant du PHP | 120 Messages

25 juin 2010, 11:53

ok oui je suis d'accord c'est ce que j'essaie d'inserer, mais c'est juste ce qui est issu d'un fichier de sauvegarde...donc cela veut dire qu'au moment où j'ai fait cette sauvegarde, ces infos etaient dans la base...ce qui prouve bien que malgré la limite 4,2 des valeurs comme 128.00 etaient enregistrées correctement...Et c'est d'ailleurs pour cela que tout semblait bon pour moi jusqu'à ce que...?

Vous pensez qu'une mise à jour de MySql chez l'hébergeur pourrait expliquer ce changement ? sinon je ne comprends pas pourquoi ces données ont subitement changé dans la base...
si tu as un soucis en informatique, dis toi bien que quelqu'un d'autre l'a eu avant toi

Eléphant du PHP | 120 Messages

28 juin 2010, 11:35

bonjour,
je reviens vers vous car personne n'a pu répondre à mes questions...
est-ce une question sans réponse ?

merci de votre aide...
si tu as un soucis en informatique, dis toi bien que quelqu'un d'autre l'a eu avant toi

ViPHP
ViPHP | 5462 Messages

28 juin 2010, 11:56

bonjour,
je reviens vers vous car personne n'a pu répondre à mes questions...
est-ce une question sans réponse ?

merci de votre aide...
normale t'as mis DECMIAL 4,2

donc 4 chiffres dont 2 apres la virgiule
le - comptant comme un caratere tu peux allé de -9,99 a 99,99

si tu veux allé plus loin fais 5,2 : mais ca ira de -99,99 a 999,99

utilise les FLOAT plutôt :wink:

Eléphant du PHP | 120 Messages

29 juin 2010, 12:07

salut Stealth35 et merci pour ta réponse mais ca ne répond pas à cette question :

Code : Tout sélectionner

au moment où j'ai fait cette sauvegarde, ces infos etaient dans la base...ce qui prouve bien que malgré la limite 4,2 des valeurs comme 128.00 etaient enregistrées correctement...Et c'est d'ailleurs pour cela que tout semblait bon pour moi jusqu'à ce que...? Vous pensez qu'une mise à jour de MySql chez l'hébergeur pourrait expliquer ce changement ? sinon je ne comprends pas pourquoi ces données ont subitement changé dans la base...
si tu as un soucis en informatique, dis toi bien que quelqu'un d'autre l'a eu avant toi

Eléphant du PHP | 120 Messages

01 juil. 2010, 17:31

bon tant pis...
si tu as un soucis en informatique, dis toi bien que quelqu'un d'autre l'a eu avant toi

ViPHP
ViPHP | 5462 Messages

01 juil. 2010, 18:33

bon tant pis...
tu la changer en 5,2 ?

Eléphant du PHP | 120 Messages

02 juil. 2010, 16:37

le probleme n'est pas de le changer, le probleme c'est que j'ai perdu toutes les valeurs à 3 chiffres avant la virgule qu'il y avait avant à la place de 99.99 !
donc je voudrais comprendre POURQUOI...
si tu as un soucis en informatique, dis toi bien que quelqu'un d'autre l'a eu avant toi

ViPHP
ViPHP | 5462 Messages

03 juil. 2010, 13:32

le probleme n'est pas de le changer, le probleme c'est que j'ai perdu toutes les valeurs à 3 chiffres avant la virgule qu'il y avait avant à la place de 99.99 !
donc je voudrais comprendre POURQUOI...
ta fais des mise a jour de ton serveur ou de ton code ?

Eléphant du PHP | 120 Messages

05 juil. 2010, 09:35

je suis chez online.net donc je ne sais pas si une mise à jour a été faite du serveur...par contre je n'ai pas fait de mise à jour de mon code...
si tu as un soucis en informatique, dis toi bien que quelqu'un d'autre l'a eu avant toi