Type numérique avec virgule

lulumOriss
Invité n'ayant pas de compte PHPfrance

25 mars 2005, 17:49

Bonjour à tous,

J'enregistre dans ma base mySQL, un prix qui peut être avec 2 chiffres après la virgule.
La colonne est de type FLOAT, or il n'enregistre que les entiers avant la virgule, pas le reste.

ex : 12,50 devient 12,00

Faut-il convertir ma variable avant l'enregistrement ?

Merci de vos réponses. lulu.

eSp
Eléphant du PHP | 56 Messages

25 mars 2005, 20:45

Salut,

Utilises plutôt le type DECIMAL .... Et n'oublie pas de spécifier la précision et l'echelle (cf. la doc).

++

Mammouth du PHP | 1885 Messages

25 mars 2005, 20:53

C'est avec un point, pas une virgule.
La programmation est l'expression de la poésie d'un programmeur
Génération PHP

eSp
Eléphant du PHP | 56 Messages

25 mars 2005, 21:03

Ah oui désolé je n'avais vu qu'il voulait une virgule ! Donc dans ce cas, il faut garder le type FLOAT et il faut faire les même précisions que pour le type DECIMAL...

Je cite la doc:
Une syntaxe alternative existe aussi, elle utilise deux paramètre optionnel après le mot clé FLOAT. Avec cette option, le premier nombre représente toujours la taille de stockage nécessaire pour la valeur, et le second nombre représente le nombre de chiffres à stocker et afficher, après la virgule décimale (comme pour les types DECIMAL et NUMERIC). Lorsque MySQL stocke un nombre pour une telle colonne, et que cette valeur a plus de décimale que requis, la valeur est arrondie pour éliminer les chiffres surnuméraires.
Par ailleurs, j'étais parti sur le type DECIMAL car en navigant dans la doc je suis tombé sur ceci:
La représentation des valeurs monétaires est un problème commun. Avec MySQL, vous devrez utiliser le type DECIMAL.
@++ :wink:

Mammouth du PHP | 1885 Messages

25 mars 2005, 21:10

J'ai dit que le mec devrait utiliser le point et non la virgule s'il veut que sa valeur ne soit pas tronquée lors de l'insertion.
La programmation est l'expression de la poésie d'un programmeur
Génération PHP

lulumOriss
Invité n'ayant pas de compte PHPfrance

26 mars 2005, 14:30

Merci pour vos réponses, le mec va essayer avec un point.
Sinon, je me pencherai sur DECIMAL, ma première option qui, je le pensais, n'était pas appropriée.

lulu.

Invité
Invité n'ayant pas de compte PHPfrance

29 mars 2005, 11:58

C'est résolu :

J'ai passé la colonne en DECIMAL et je convertis mon prix avant l'enregistrement en remplaçant la virgule par un point.

ça donne :
$prix = preg_replace('/,/','.', $prix);
Merci de votre aide.