type de données NUMERIC

Eléphanteau du PHP | 14 Messages

11 oct. 2011, 18:32

Bonjours,

commen fait-on pour calculer des prix avec le type de données NUMERIC dans mysql
exemple NUMERIC(5,2)

merci

ViPHP
xTG
ViPHP | 7331 Messages

11 oct. 2011, 18:38

De la même façon qu'avec un type flottant ou bien entier.
Qu'est ce qui te bloque ?

Eléphanteau du PHP | 14 Messages

11 oct. 2011, 20:36

Le problemme c'est que c'est stocké sous forme de chaine de caractères (d'aprés se que j'ai lue) alors je me demande
comment on peux faire des calcules sur une chaine de caractères

merci

ViPHP
xTG
ViPHP | 7331 Messages

12 oct. 2011, 09:29

Je ne sais pas où tu as lu ceci mais surement pas dans la documentation. ^^
Ce type est stocké comme le type DECIMAL, à savoir en binaire.
Mais c'est totalement transparent pour toi, tu l'utilises comme tu utiliserais une donnée au format INT.

Mammouth du PHP | 2278 Messages

12 oct. 2011, 10:19

Il l'a lu dans la documentation que voici:
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.
DEC[(M[,D])] [UNSIGNED] [ZEROFILL], NUMERIC[(M[,D])] [UNSIGNED] [ZEROFILL], FIXED[(M[,D])] [UNSIGNED] [ZEROFILL]

Ce sont des synonymes pour DECIMAL.
Le nombre est stocké comme une suite de chiffres en arrondissant les décimales au nombre indiqué.
Mysql dispose d'une arithmétique intégrée de ce type de nombres qui est surtout utilisé en compta pour obtenir ce qu'on appelle une précision absolue... Les algorithmes de calcul en sont particulièrement coriaces, mais bien connus...
Je viens de vérifier avec Mysql en ligne de commande : le nombre est stocké exactement sous la forme où il est entré; si le nombre de décimales dépasse D, il est arrondi; si la longueur de la saisie dépasse M, le nombre devient 99999.99...
Je n'ai pas testé ce que PHP faisait de ces valeurs...
Le décimal codé binaire fai(sai)t la même chose.
Vanitas vanitatum et omnia vanitas
Mes derniers livres :
Sauvez les Mots chez BoD,
Tous les chemins mènent à ROM chez BoD

ViPHP
xTG
ViPHP | 7331 Messages

12 oct. 2011, 11:23

La même page dans sa version anglaise n'indique donc pas la même chose, mais pour ma part je me fierai davantage à la version anglaise. ;)
As of MySQL 5.0.3, DECIMAL values are stored in binary format. Previously, they were stored as strings, with one character used for each digit of the value, the decimal point (if the scale is greater than 0), and the “-” sign (for negative numbers).

Eléphanteau du PHP | 14 Messages

12 oct. 2011, 12:12

Je comprend mieux également pourquoi on conseil de travailler les prix avec le type DECIMAL OU NUMERIC

merci