|
Publicité ' | ||||||||||||||||||||||||
|
|
#1 |
|
Membre éclairé
![]() Gérard OkonoDéveloppeur Web Inscription : juillet 2006 Messages : 709 ![]() |
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... |
|
|
00
|
|
|
#2 |
|
Membre éclairé
![]() Développeur Sharepoint/Biztalk Inscription : octobre 2008 Messages : 500 ![]() |
Pourquoi pas tout simplement un int ?
Tu as un traitement spécial sur ces valeurs ? |
|
|
00
|
|
|
#3 |
|
Membre éclairé
![]() Gérard OkonoDéveloppeur Web Inscription : juillet 2006 Messages : 709 ![]() |
|
|
|
00
|
|
|
#4 |
|
Nouveau Membre du Club
![]() Inscription : octobre 2007 Messages : 34 ![]() |
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. |
|
|
00
|
|
|
#5 |
|
Membre éclairé
![]() Gérard OkonoDéveloppeur Web Inscription : juillet 2006 Messages : 709 ![]() |
Pouviez vous me rendre cela plus claire ?
|
|
|
00
|
|
|
#6 |
|
Nouveau Membre du Club
![]() Inscription : octobre 2007 Messages : 34 ![]() |
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']); |
|
|
00
|
|
|
#7 |
|
Futur Membre du Club
![]() Ahmed Ingénieur systèmes et réseaux Inscription : octobre 2007 Messages : 16 ![]() |
Bonjour,
Si c le cas d'un nombre avec des milliards, le meilleur type est REAL. Bonne chance |
|
|
00
|
|
|
#8 |
|
Membre éclairé
![]() Gérard OkonoDéveloppeur Web Inscription : juillet 2006 Messages : 709 ![]() |
|
|
|
00
|
|
|
#9 |
|
Membre éclairé
![]() Jérémy Étudiant Inscription : octobre 2009 Messages : 236 ![]() |
|
|
|
00
|
|
|
#10 | |
|
Nouveau Membre du Club
![]() Inscription : octobre 2007 Messages : 34 ![]() |
Citation:
|
|
|
|
00
|
|
|
#11 | |
|
Membre éclairé
![]() Jérémy Étudiant Inscription : octobre 2009 Messages : 236 ![]() |
Je m'en serais douté
Citation:
|
|
|
|
00
|
|
|
#12 |
![]() ![]() |
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 ! |
|
00
|
|
|
#13 | |
|
Membre Expert
![]() Ingénieur développement logiciels Inscription : novembre 2010 Messages : 401 ![]() |
Citation:
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. |
|
|
|
00
|
|
|
#14 |
|
Membre éclairé
![]() Gérard OkonoDéveloppeur Web Inscription : juillet 2006 Messages : 709 ![]() |
|
|
|
00
|
|
|
#15 |
|
Membre Expert
![]() Ingénieur développement logiciels Inscription : novembre 2010 Messages : 401 ![]() |
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. |
|
|
20
|
|
|
#16 |
|
Membre éclairé
![]() Gérard OkonoDéveloppeur Web Inscription : juillet 2006 Messages : 709 ![]() |
J'ai opté pour bigint qui me permet de stocker des centaines de milliards. mais autre de bien je suis prenant.
Merci à vous tous...
|
|
|
00
|
|
|
#17 | |
|
Membre Expert
![]() Ingénieur développement logiciels Inscription : novembre 2010 Messages : 401 ![]() |
Citation:
__________________
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. |
|
|
|
00
|
|
|
#18 | |
|
Futur Membre du Club
![]() Ahmed Ingénieur systèmes et réseaux Inscription : octobre 2007 Messages : 16 ![]() |
Citation:
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 |
|
|
|
00
|
|
|
#19 | |
|
Membre Expert
![]() Ingénieur développement logiciels Inscription : novembre 2010 Messages : 401 ![]() |
Citation:
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. |
|
|
|
00
|
|
|
#20 | ||
|
Futur Membre du Club
![]() Ahmed Ingénieur systèmes et réseaux Inscription : octobre 2007 Messages : 16 ![]() |
Citation:
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:
![]() En plus et c'est toujours le cas pour un nombre monétaire soit sur mysql ou d'autres SGBD comme oracle |
||
|
|
00
|
Copyright © 2000-2012 - www.developpez.com