IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

PHP & Base de données Discussion :

Quel type de champ Mysql pour valeurs monétaires [MySQL]


Sujet :

PHP & Base de données

  1. #1
    Membre confirmé
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juillet 2006
    Messages
    985
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Cameroun

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

    Informations forums :
    Inscription : Juillet 2006
    Messages : 985
    Points : 460
    Points
    460
    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...

  2. #2
    Membre expérimenté
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2008
    Messages
    1 051
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Hautes Pyrénées (Midi Pyrénées)

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

    Informations forums :
    Inscription : Octobre 2008
    Messages : 1 051
    Points : 1 638
    Points
    1 638
    Par défaut
    Pourquoi pas tout simplement un int ?

    Tu as un traitement spécial sur ces valeurs ?
    Règle N° 1 : Si tout va bien, ne touchez à rien.

  3. #3
    Membre confirmé
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juillet 2006
    Messages
    985
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Cameroun

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

    Informations forums :
    Inscription : Juillet 2006
    Messages : 985
    Points : 460
    Points
    460
    Par défaut
    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).

  4. #4
    Nouveau membre du Club
    Inscrit en
    Octobre 2007
    Messages
    35
    Détails du profil
    Informations forums :
    Inscription : Octobre 2007
    Messages : 35
    Points : 37
    Points
    37
    Par défaut
    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.

  5. #5
    Membre confirmé
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juillet 2006
    Messages
    985
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Cameroun

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

    Informations forums :
    Inscription : Juillet 2006
    Messages : 985
    Points : 460
    Points
    460
    Par défaut
    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 ?

  6. #6
    Nouveau membre du Club
    Inscrit en
    Octobre 2007
    Messages
    35
    Détails du profil
    Informations forums :
    Inscription : Octobre 2007
    Messages : 35
    Points : 37
    Points
    37
    Par défaut
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    $nValeurHtml = devTransformationMonetaire($aResultat['nom_champ']);
    Cdlt.

  7. #7
    Membre à l'essai
    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Octobre 2007
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    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
    Par défaut
    Bonjour,

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

    Bonne chance

  8. #8
    Membre confirmé
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juillet 2006
    Messages
    985
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Cameroun

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

    Informations forums :
    Inscription : Juillet 2006
    Messages : 985
    Points : 460
    Points
    460
    Par défaut
    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é ?

  9. #9
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2009
    Messages
    236
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    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 : 348
    Points
    348
    Par défaut
    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 ?
    Pensez à la balise [CODE].
    Aucune réponse aux questions par MP.

  10. #10
    Nouveau membre du Club
    Inscrit en
    Octobre 2007
    Messages
    35
    Détails du profil
    Informations forums :
    Inscription : Octobre 2007
    Messages : 35
    Points : 37
    Points
    37
    Par défaut
    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).

  11. #11
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2009
    Messages
    236
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    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 : 348
    Points
    348
    Par défaut
    Je m'en serais douté Mais je parlais spécifiquement de la réponse d'Ahmedious
    Si c le cas d'un nombre avec des milliards
    Du coup ouai c'est plus logique x)
    Pensez à la balise [CODE].
    Aucune réponse aux questions par MP.

  12. #12
    Modérateur

    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 799
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    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 : 16 799
    Points : 34 031
    Points
    34 031
    Billets dans le blog
    14
    Par défaut
    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 Supérieure de Formation de l'Enseignement Agricole. Autoentrepreneur.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « 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 la suite Linux Mageïa !

  13. #13
    Membre chevronné Avatar de zeyr2mejetrem
    Homme Profil pro
    Responsable de service informatique
    Inscrit en
    Novembre 2010
    Messages
    471
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Responsable de service informatique

    Informations forums :
    Inscription : Novembre 2010
    Messages : 471
    Points : 2 040
    Points
    2 040
    Par défaut
    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.

  14. #14
    Membre confirmé
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juillet 2006
    Messages
    985
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Cameroun

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

    Informations forums :
    Inscription : Juillet 2006
    Messages : 985
    Points : 460
    Points
    460
    Par défaut
    Citation Envoyé par zeyr2mejetrem Voir le message
    BIGINT si tu stockes des centimes
    Que veut dire stocker les centimes?

  15. #15
    Membre chevronné Avatar de zeyr2mejetrem
    Homme Profil pro
    Responsable de service informatique
    Inscrit en
    Novembre 2010
    Messages
    471
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Responsable de service informatique

    Informations forums :
    Inscription : Novembre 2010
    Messages : 471
    Points : 2 040
    Points
    2 040
    Par défaut
    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.

  16. #16
    Membre confirmé
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juillet 2006
    Messages
    985
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Cameroun

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

    Informations forums :
    Inscription : Juillet 2006
    Messages : 985
    Points : 460
    Points
    460
    Par défaut
    J'ai opté pour bigint qui me permet de stocker des centaines de milliards. mais autre de bien je suis prenant.

    Merci à vous tous...

  17. #17
    Membre chevronné Avatar de zeyr2mejetrem
    Homme Profil pro
    Responsable de service informatique
    Inscrit en
    Novembre 2010
    Messages
    471
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Responsable de service informatique

    Informations forums :
    Inscription : Novembre 2010
    Messages : 471
    Points : 2 040
    Points
    2 040
    Par défaut
    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.

  18. #18
    Membre à l'essai
    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Octobre 2007
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    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
    Par défaut
    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

  19. #19
    Membre chevronné Avatar de zeyr2mejetrem
    Homme Profil pro
    Responsable de service informatique
    Inscrit en
    Novembre 2010
    Messages
    471
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Responsable de service informatique

    Informations forums :
    Inscription : Novembre 2010
    Messages : 471
    Points : 2 040
    Points
    2 040
    Par défaut
    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.

  20. #20
    Membre à l'essai
    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Octobre 2007
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    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
    Par défaut
    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 .

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. [MySQL] MySQL, quel type de champ choisir pour prix
    Par okoweb dans le forum PHP & Base de données
    Réponses: 3
    Dernier message: 22/08/2010, 00h12
  2. [SQL CE 3.5] Quel type de champs utiliser pour du texte ?
    Par zax-tfh dans le forum Développement
    Réponses: 10
    Dernier message: 06/03/2009, 15h30
  3. Réponses: 4
    Dernier message: 24/10/2008, 09h21
  4. quel type de champ pour un format monétaire
    Par tavarlindar dans le forum Requêtes
    Réponses: 2
    Dernier message: 13/08/2008, 23h38
  5. [aide] Quel type de champs utiliser pour mettre un "+"
    Par lothar59 dans le forum Décisions SGBD
    Réponses: 1
    Dernier message: 04/03/2007, 14h05

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo