Précédent   Forum des professionnels en informatique > PHP > PHP & SGBD > PHP & MySQL
PHP & MySQL Forum d'entraide sur les fonctions MySQL avec PHP. Avant de poster -> FAQ MySQL, Cours MySQL et Sources MySQL. Pour les questions concernant le moteur MySQL plutôt que les fonctions PHP, merci d'utiliser le forum MySQL.
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 16/06/2011, 10h49   #1
Membre éclairé
 
Homme Gérard Okono
Développeur Web
Inscription : juillet 2006
Messages : 709
Détails du profil
Informations personnelles :
Nom : Homme Gérard Okono
Localisation : Cameroun

Informations professionnelles :
Activité : Développeur Web
Secteur : Administration - Collectivité locale

Informations forums :
Inscription : juillet 2006
Messages : 709
Points : 328
Points : 328
Par défaut Quel type de champ Mysql pour valeurs monétaires

Bonjour,
Tout est dans le titre, mais en somme je souhaite dans une table stocker des valeurs monétaires. Quel type de champ choisir dans MySQL. Les valeurs pourront être des milliards de franc CFA.

Merci d'avance...
okoweb est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/06/2011, 12h19   #2
Membre éclairé
 
Homme
Développeur Sharepoint/Biztalk
Inscription : octobre 2008
Messages : 500
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France, Pyrénées Atlantiques (Aquitaine)

Informations professionnelles :
Activité : Développeur Sharepoint/Biztalk

Informations forums :
Inscription : octobre 2008
Messages : 500
Points : 398
Points : 398
Pourquoi pas tout simplement un int ?

Tu as un traitement spécial sur ces valeurs ?
bob633 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/06/2011, 13h29   #3
Membre éclairé
 
Homme Gérard Okono
Développeur Web
Inscription : juillet 2006
Messages : 709
Détails du profil
Informations personnelles :
Nom : Homme Gérard Okono
Localisation : Cameroun

Informations professionnelles :
Activité : Développeur Web
Secteur : Administration - Collectivité locale

Informations forums :
Inscription : juillet 2006
Messages : 709
Points : 328
Points : 328
Citation:
Envoyé par bob633 Voir le message
Pourquoi pas tout simplement un int ?

Tu as un traitement spécial sur ces valeurs ?
Justement des traitements arithmétiques ordinaires (addition, soustraction, division et multiplication).
okoweb est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/06/2011, 13h42   #4
Nouveau Membre du Club
 
Inscription : octobre 2007
Messages : 34
Détails du profil
Informations forums :
Inscription : octobre 2007
Messages : 34
Points : 31
Points : 31
Bonjour okoweb,

Il n'existe pas de type monétaires dans les tables MySQL car suivant où tu es l'affichage n'est pas le même.
Pour les connaitre ouvre un fichier excel et clique droit->format de cellule.
Bref, je te conseil de prendre le type "float" ou "double" suivant la valeur maximale qui tu peux atteindre : http://http://www.vulgarisation-info...es-donnees.php et fait la transformation de la donnée seulement à l'affichage, ça t'évitera de faire de multiple transformations si tu doit faire des calculs avec cette données. De plus dissocie les valeurs d'affichage et celles que tu récupères depuis la base.


Cdlt.
cycyand1 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/06/2011, 14h06   #5
Membre éclairé
 
Homme Gérard Okono
Développeur Web
Inscription : juillet 2006
Messages : 709
Détails du profil
Informations personnelles :
Nom : Homme Gérard Okono
Localisation : Cameroun

Informations professionnelles :
Activité : Développeur Web
Secteur : Administration - Collectivité locale

Informations forums :
Inscription : juillet 2006
Messages : 709
Points : 328
Points : 328
Citation:
Envoyé par cycyand1 Voir le message
...
fait la transformation de la donnée seulement à l'affichage, ça t'évitera de faire de multiple transformations si tu doit faire des calculs avec cette données. De plus dissocie les valeurs d'affichage et celles que tu récupères depuis la base.
Cdlt.
Pouviez vous me rendre cela plus claire ?
okoweb est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/06/2011, 14h41   #6
Nouveau Membre du Club
 
Inscription : octobre 2007
Messages : 34
Détails du profil
Informations forums :
Inscription : octobre 2007
Messages : 34
Points : 31
Points : 31
okoweb,
Concrètement :
$nValeurHtml = valeur que tu vas afficher à l'ecran.
devTransformationMonetaire() : fonction qui te retourne la transformation monétaire que tu souhaites.
$aResultat['nom_champ'] : valeur extraite de la requête MySQL

Tu appelles la fonction sur chaque champ où tu dois effectuer la transformation monétaire.

Code :
$nValeurHtml = devTransformationMonetaire($aResultat['nom_champ']);
Cdlt.
cycyand1 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/06/2011, 14h49   #7
Futur Membre du Club
 
Homme Ahmed
Ingénieur systèmes et réseaux
Inscription : octobre 2007
Messages : 16
Détails du profil
Informations personnelles :
Nom : Homme Ahmed
Localisation : Maroc

Informations professionnelles :
Activité : Ingénieur systèmes et réseaux
Secteur : High Tech - Multimédia et Internet

Informations forums :
Inscription : octobre 2007
Messages : 16
Points : 19
Points : 19
Bonjour,

Si c le cas d'un nombre avec des milliards, le meilleur type est REAL.

Bonne chance
ahmedious est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/06/2011, 15h13   #8
Membre éclairé
 
Homme Gérard Okono
Développeur Web
Inscription : juillet 2006
Messages : 709
Détails du profil
Informations personnelles :
Nom : Homme Gérard Okono
Localisation : Cameroun

Informations professionnelles :
Activité : Développeur Web
Secteur : Administration - Collectivité locale

Informations forums :
Inscription : juillet 2006
Messages : 709
Points : 328
Points : 328
Citation:
Envoyé par ahmedious Voir le message
Si c le cas d'un nombre avec des milliards, le meilleur type est REAL.
Oui certaines valeurs se chiffres à des milliards de francs CFA...

Donc le type REAL reste approprié ?
okoweb est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/06/2011, 16h00   #9
Membre éclairé
 
Homme Jérémy
Étudiant
Inscription : octobre 2009
Messages : 236
Détails du profil
Informations personnelles :
Nom : Homme Jérémy
Localisation : France

Informations professionnelles :
Activité : Étudiant
Secteur : High Tech - Produits et services télécom et Internet

Informations forums :
Inscription : octobre 2009
Messages : 236
Points : 322
Points : 322
Citation:
Envoyé par ahmedious Voir le message
Si c le cas d'un nombre avec des milliards, le meilleur type est REAL.
Je me pose aussi la question pourquoi typer en réel ? Pourquoi ne pas favoriser un bigint ?
gwharl est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/06/2011, 16h11   #10
Nouveau Membre du Club
 
Inscription : octobre 2007
Messages : 34
Détails du profil
Informations forums :
Inscription : octobre 2007
Messages : 34
Points : 31
Points : 31
Citation:
Je me pose aussi la question pourquoi typer en réel ? Pourquoi ne pas favoriser un bigint ?
Juste parce que les centimes existent dans la monnaie et Bigint est un entier (gros entier).
cycyand1 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/06/2011, 16h16   #11
Membre éclairé
 
Homme Jérémy
Étudiant
Inscription : octobre 2009
Messages : 236
Détails du profil
Informations personnelles :
Nom : Homme Jérémy
Localisation : France

Informations professionnelles :
Activité : Étudiant
Secteur : High Tech - Produits et services télécom et Internet

Informations forums :
Inscription : octobre 2009
Messages : 236
Points : 322
Points : 322
Je m'en serais douté Mais je parlais spécifiquement de la réponse d'Ahmedious
Citation:
Si c le cas d'un nombre avec des milliards
Du coup ouai c'est plus logique x)
gwharl est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/06/2011, 16h21   #12
Modérateur
 
Avatar de CinePhil
 
Homme Philippe Leménager
Ingénieur d'études en informatique
Inscription : août 2006
Messages : 11 007
Détails du profil
Informations personnelles :
Nom : Homme Philippe Leménager
Âge : 48
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations professionnelles :
Activité : Ingénieur d'études en informatique
Secteur : Enseignement

Informations forums :
Inscription : août 2006
Messages : 11 007
Points : 18 278
Points : 18 278
Envoyer un message via MSN à CinePhil
Le type approprié pour les données monétaires et qui permet de faire des calculs exacts est DECIMAL.
__________________
Philippe Leménager. Ingénieur d'étude à l'École Nationale de Formation Agronomique.
Mon blog sur la conception des BDD, le langage SQL, le PHP avec Zend Framework...
« Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
À la maison comme au bureau, j'utilise Mandriva Linux ou Mageïa ! Soutenons l'industrie logicielle française !
Linuxiens, comptez-vous !
CinePhil est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/06/2011, 16h55   #13
Membre Expert
 
Avatar de zeyr2mejetrem
 
Homme
Ingénieur développement logiciels
Inscription : novembre 2010
Messages : 401
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France, Rhône (Rhône Alpes)

Informations professionnelles :
Activité : Ingénieur développement logiciels

Informations forums :
Inscription : novembre 2010
Messages : 401
Points : 1 641
Points : 1 641
Citation:
Envoyé par CinePhil Voir le message
Le type approprié pour les données monétaires et qui permet de faire des calculs exacts est DECIMAL.
+1
Ou BIGINT si tu stockes des centimes
__________________
Si tu ne sais pas faire, apprends. Si tu fais, fais bien. Si tu sais bien faire, enseigne.
Mieux vaut paraître stupide quelques temps que rester stupide toute sa vie.
zeyr2mejetrem est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/06/2011, 15h08   #14
Membre éclairé
 
Homme Gérard Okono
Développeur Web
Inscription : juillet 2006
Messages : 709
Détails du profil
Informations personnelles :
Nom : Homme Gérard Okono
Localisation : Cameroun

Informations professionnelles :
Activité : Développeur Web
Secteur : Administration - Collectivité locale

Informations forums :
Inscription : juillet 2006
Messages : 709
Points : 328
Points : 328
Citation:
Envoyé par zeyr2mejetrem Voir le message
BIGINT si tu stockes des centimes
Que veut dire stocker les centimes?
okoweb est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/06/2011, 15h17   #15
Membre Expert
 
Avatar de zeyr2mejetrem
 
Homme
Ingénieur développement logiciels
Inscription : novembre 2010
Messages : 401
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France, Rhône (Rhône Alpes)

Informations professionnelles :
Activité : Ingénieur développement logiciels

Informations forums :
Inscription : novembre 2010
Messages : 401
Points : 1 641
Points : 1 641
Citation:
Envoyé par okoweb Voir le message
Que veut dire stocker les centimes?
Au lieu de stocker dans ta base tes sommes sous la forme 1500 000,50 CFA en Decimal , ce qui peut être dangereux dans la mesure où rien dans l'infra ne t'empêches de stocker 1520, 156666666 CFA ce qui ne signifie rien en soi, tu stockes 150000050 soit des centimes de francs CFA en BIGINT. Ainsi tu es sûr de ne pas stocker des millimes par accident.

De plus tu peux créer un trigger qui va faire ton arrondi.
Ainsi si tu calcules un intérêt financier à 3,5% par exemple sur 125 CFA tu obtiens
0.035 * 12500 = 437,5 ==> (en entier arrondi) 438 centimes de CFA ==> 4,38 CFA

alors qu'en décimal tu aurais stocké 4,375 CFA or je suis pas spécialiste du CFA mais il me semble pas qu'il y ait de pièce de 0,005 CFA ??
__________________
Si tu ne sais pas faire, apprends. Si tu fais, fais bien. Si tu sais bien faire, enseigne.
Mieux vaut paraître stupide quelques temps que rester stupide toute sa vie.
zeyr2mejetrem est déconnecté   Envoyer un message privé Réponse avec citation 20
Vieux 18/06/2011, 17h49   #16
Membre éclairé
 
Homme Gérard Okono
Développeur Web
Inscription : juillet 2006
Messages : 709
Détails du profil
Informations personnelles :
Nom : Homme Gérard Okono
Localisation : Cameroun

Informations professionnelles :
Activité : Développeur Web
Secteur : Administration - Collectivité locale

Informations forums :
Inscription : juillet 2006
Messages : 709
Points : 328
Points : 328
J'ai opté pour bigint qui me permet de stocker des centaines de milliards. mais autre de bien je suis prenant.

Merci à vous tous...
okoweb est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/06/2011, 10h00   #17
Membre Expert
 
Avatar de zeyr2mejetrem
 
Homme
Ingénieur développement logiciels
Inscription : novembre 2010
Messages : 401
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France, Rhône (Rhône Alpes)

Informations professionnelles :
Activité : Ingénieur développement logiciels

Informations forums :
Inscription : novembre 2010
Messages : 401
Points : 1 641
Points : 1 641
Citation:
Envoyé par okoweb Voir le message
J'ai opté pour bigint qui me permet de stocker des centaines de milliards. mais autre de bien je suis prenant.

Merci à vous tous...
A ton service.
__________________
Si tu ne sais pas faire, apprends. Si tu fais, fais bien. Si tu sais bien faire, enseigne.
Mieux vaut paraître stupide quelques temps que rester stupide toute sa vie.
zeyr2mejetrem est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/06/2011, 15h10   #18
Futur Membre du Club
 
Homme Ahmed
Ingénieur systèmes et réseaux
Inscription : octobre 2007
Messages : 16
Détails du profil
Informations personnelles :
Nom : Homme Ahmed
Localisation : Maroc

Informations professionnelles :
Activité : Ingénieur systèmes et réseaux
Secteur : High Tech - Multimédia et Internet

Informations forums :
Inscription : octobre 2007
Messages : 16
Points : 19
Points : 19
Citation:
Envoyé par okoweb Voir le message
Oui certaines valeurs se chiffres à des milliards de francs CFA...

Donc le type REAL reste approprié ?
Pour un champ monétaire, il doit y avoir des décimales et donc le BIGINT n'est pas l'approprié, voici un détail technique de:

Le BIGINT n'est pas flottant.

BIGINT[(n)] [UNSIGNED][ZEROFILL]
Entier (sur 8 octets) de – 9 223 372 036 854 775 808 à
9 223 372 036 854 775 807 signé, 0 à
18 446 744 073 709 551 615 non signé.


Le REAL est l'alias de DOUBLE avec 15 en décimales et pas 30 comme le DECIMAL.

DOUBLE[(n[,p])] [UNSIGNED][ZEROFILL]
Flottant (sur 8 octets) p désigne la précision double (jusqu’à 15
décimales) de -1.7 10+308 à -2.2 10-308, 0, signé, et de 2.2 10-308
à 1.7 10+308 non signé.

DECIMAL[(n[,p])] [UNSIGNED][ZEROFILL]
Décimal à virgule fixe, p désigne la précision (nombre de chiffres
après la virgule, maximum 30). Par défaut n vaut 10, p vaut 0.

Il y a aussi le FLOAT:

FLOAT[(n[,p])] [UNSIGNED][ZEROFILL]
Flottant (de 4 à 8 octets) p désigne la précision simple (jusqu’à
7décimales) de -3.4 10+38 à -1.1 10-38, 0, signé, et de 1.1 10-38 à
3.4 10+38 non signé.

Voilà, j'espère que cette explication technique pourra vous aider

Bonne chance
ahmedious est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/06/2011, 15h16   #19
Membre Expert
 
Avatar de zeyr2mejetrem
 
Homme
Ingénieur développement logiciels
Inscription : novembre 2010
Messages : 401
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France, Rhône (Rhône Alpes)

Informations professionnelles :
Activité : Ingénieur développement logiciels

Informations forums :
Inscription : novembre 2010
Messages : 401
Points : 1 641
Points : 1 641
Citation:
Envoyé par ahmedious Voir le message
Pour un champ monétaire, il doit y avoir des décimales et donc le BIGINT n'est pas l'approprié, voici un détail technique de:

Le BIGINT n'est pas flottant.

BIGINT[(n)] [UNSIGNED][ZEROFILL]
Entier (sur 8 octets) de – 9 223 372 036 854 775 808 à
9 223 372 036 854 775 807 signé, 0 à
18 446 744 073 709 551 615 non signé.
Si tu lis les précédents post, j'explique qu'un monétaire n'est PAS un décimal à proprement parler puisqu'il ne peut pas avoir plus de 2 décimales.

Par conséquent une somme d'argent est un chiffre ENTIER de centimes.
Et comme ton rappel technique très utile le dis tu peux donc stocker des montants allant de

-92 233 720 368 547 758,08 CFA
à 92 233 720 368 547 758,08 CFA

ou pour les valeurs absolues (ex: prix à l'unité)
184 467 440 737 095 516,15 CFA
__________________
Si tu ne sais pas faire, apprends. Si tu fais, fais bien. Si tu sais bien faire, enseigne.
Mieux vaut paraître stupide quelques temps que rester stupide toute sa vie.
zeyr2mejetrem est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/06/2011, 16h36   #20
Futur Membre du Club
 
Homme Ahmed
Ingénieur systèmes et réseaux
Inscription : octobre 2007
Messages : 16
Détails du profil
Informations personnelles :
Nom : Homme Ahmed
Localisation : Maroc

Informations professionnelles :
Activité : Ingénieur systèmes et réseaux
Secteur : High Tech - Multimédia et Internet

Informations forums :
Inscription : octobre 2007
Messages : 16
Points : 19
Points : 19
Citation:
Envoyé par zeyr2mejetrem Voir le message
Au lieu de stocker dans ta base tes sommes sous la forme 1500 000,50 CFA en Decimal , ce qui peut être dangereux dans la mesure où rien dans l'infra ne t'empêches de stocker 1520, 156666666 CFA ce qui ne signifie rien en soi, tu stockes 150000050 soit des centimes de francs CFA en BIGINT. Ainsi tu es sûr de ne pas stocker des millimes par accident.

De plus tu peux créer un trigger qui va faire ton arrondi.
Ainsi si tu calcules un intérêt financier à 3,5% par exemple sur 125 CFA tu obtiens
0.035 * 12500 = 437,5 ==> (en entier arrondi) 438 centimes de CFA ==> 4,38 CFA

alors qu'en décimal tu aurais stocké 4,375 CFA or je suis pas spécialiste du CFA mais il me semble pas qu'il y ait de pièce de 0,005 CFA ??
Je vois pas pourquoi tu parles du danger puisque on peut maîtriser le nombre de décimales, et en plus tu rajoutes du travail gratuit.
Avec le DOUBLE[(n[,p])] où p désigne la précision double, on peut y mettre 2 et donc pas de risque au lieu d'avoir le fardeau de diviser toujours par 100 .
Citation:
Envoyé par zeyr2mejetrem Voir le message
j'explique qu'un monétaire n'est PAS un décimal à proprement parler puisqu'il ne peut pas avoir plus de 2 décimales
Non c pas vrai, un type qui est flottant même avec un seul nombre après la virgule c'est un DECIMAL

En plus et c'est toujours le cas pour un nombre monétaire soit sur mysql ou d'autres SGBD comme oracle .
ahmedious est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 21h28.


 
 
 
 
Partenaires

Hébergement Web