|
Publicité ' | |||||||||||||||||||||||
|
|
#1 |
|
Nouveau Membre du Club
![]() Inscription : février 2009 Messages : 109 ![]() |
Bonjour,
je cherche désespérément à insérer un champs en décimal dans une table ACCESS, mais la valeur est formatée à l'insertion. Code et Exemple: Code :
commande.Parameters.Add(new OleDbParameter("@prix", Convert.ToDecimal(mtbPrix.Text))); mon champ prix dans la table est défini comme ceci dans la table. Taille du champ : Décimal Précision : 18 échelle : 2 Décimales : 2 si j’essaie d'insérer 1,12 la valeur 112 est introduite dans la table. Est-ce que c'est ACCESS qui formate la valeur? comment éviter cela? Merci ( en espérant ne pas m'être trompé de forum ) |
|
|
00
|
|
|
#2 | ||
|
Membre Expert
![]() ![]() Eric MetzDéveloppeur informatique Inscription : avril 2006 Messages : 515 ![]() |
Bonjour,
J'ai recréer une DB avec une table reprenant un champ du même type que le votre. Effectivement j'ai reproduis l'erreur. Le code suivant fonctionne : Code :
|
||
|
00
|
|
|
#3 |
|
Nouveau Membre du Club
![]() Inscription : février 2009 Messages : 109 ![]() |
Bonjour,
tout en laissant le type decimal dans la table? |
|
|
00
|
|
|
#4 |
|
Membre Expert
![]() ![]() Eric MetzDéveloppeur informatique Inscription : avril 2006 Messages : 515 ![]() |
Bonsoir,
Je n'ai pas touché au schéma de la table, j'ai bien repris celui que vous avez spécifié dans votre post |
|
00
|
|
|
#5 |
|
Nouveau Membre du Club
![]() Inscription : février 2009 Messages : 109 ![]() |
Bonjour binou76,
Effectivement cela fonctionne. J'avais antérieurement essayer de travailler avec des double, mais là c'est C# qui provoquait des problèmes de précisions au niveau de calculs. Il faudrait donc que je trouve plutôt une solution pour travailler de nouveau avec des double alors |
|
|
00
|
|
|
#6 |
|
Membre Expert
![]() ![]() Eric MetzDéveloppeur informatique Inscription : avril 2006 Messages : 515 ![]() |
Personnellement quand je travaille avec des nombres avec décimal j'utilise soit les float soit les doubles. Je n'ai jamais utilisé le type décimal.
Erreur ou non, je n'ai jamais eu de problème pour autant que les types utilisés soit les mêmes. Maintenant d'autres membres du forum auront peut-être des explications plus concrètes sur d'éventuels avantages à utiliser le type décimal. |
|
00
|
|
|
#7 |
|
Membre Expert
![]() Consultant informatique Inscription : février 2006 Messages : 727 ![]() |
Bonjour,
Quant au choix decimal ou double, on ne peut pas te donner une réponse, il faut que tu choisisses le type qui correspond le plus à tes besoins. Deux liens intéressants Lien1 et Lien2. A toi de voir
__________________
Un âne se croit savant parce qu'on le charge de livres (proverbe américain) N'oubliez pas de avant de ![]() Pas de question techniques par MP, c'est contre la philosophie du forum
|
|
|
00
|
|
|
#8 | ||
|
Nouveau Membre du Club
![]() Inscription : février 2009 Messages : 109 ![]() |
Bonjour,
J'ai toujours travaillé avec des double aussi, mais cette fois-ci j'ai des soucis. par cet exemple de code : Code :
ce que j'obtiens après la boucle : montTotal = 579.99 // ce qui est normal reste = 580.00 mais à l'opération reste - montTotal, je n'obtiens pas 0, 01 mais 0,00999999999999091. Une idée de ce que ça peut être? Merci |
||
|
|
00
|
|
|
#9 |
|
Membre Expert
![]() Consultant informatique Inscription : février 2006 Messages : 727 ![]() |
avec des decimal tu aurais une meilleure précision
Reprend tes cours sur la représentation binaire des nombres et fais le calul, tu verras que ça peut être normal
__________________
Un âne se croit savant parce qu'on le charge de livres (proverbe américain) N'oubliez pas de avant de ![]() Pas de question techniques par MP, c'est contre la philosophie du forum
|
|
|
00
|
|
|
#10 |
|
Nouveau Membre du Club
![]() Inscription : février 2009 Messages : 109 ![]() |
Bonjour sisqo60,
Oui, c'est ce qui me pose problème ( le problème initial du post ) le décimal est plus précis, mais il me pose problème quand je dois le stocker dans la base de données |
|
|
00
|
|
|
#11 | ||
|
Membre Expert
![]() ![]() Eric MetzDéveloppeur informatique Inscription : avril 2006 Messages : 515 ![]() |
Bonjour je pense que j'ai la solution à votre problème.
J'ai gardé le même schéma pour votre table. J'utilise le Type "Décimal" pour les différents calculs pour corriger votre problème causé par manque de précision du Type Double. je spécifie juste "OleDbType.Double" comme type lors de la création du paramètre pour la sauvegarde et la valeur est sauvée correctement dans la table. Et lors de la récupération je récupère bien la bonne valeur dans une variable de type "Decimal". Voici le code que j'ai écris comme test (ne faite pas attention à l'Id qui est harcodé c'est pas propre mais c’était pour gagner un peu de temps). Code :
|
||
|
00
|
|
|
#12 |
|
Nouveau Membre du Club
![]() Inscription : février 2009 Messages : 109 ![]() |
Merci,
Je teste cela en rentrant du boulot demain et je vous tiens au courant. |
|
|
00
|
|
|
#13 |
|
Membre Expert
![]() Consultant informatique Inscription : février 2006 Messages : 727 ![]() |
Bonjour,
Il y a OleDbType.Decimal et OleDbType.Numeric qui te permettrons de mieux stocker tes données en base. J'ai bien peur qu'enregistrer un decimal en type double te donnes (pas toujours, ça dépend de la précision) des valeurs différentes base. Si ton champ en base de données est un Numeric (18, 2), utilises numeric
__________________
Un âne se croit savant parce qu'on le charge de livres (proverbe américain) N'oubliez pas de avant de ![]() Pas de question techniques par MP, c'est contre la philosophie du forum
|
|
|
00
|
|
|
#14 |
|
Membre Expert
![]() ![]() Eric MetzDéveloppeur informatique Inscription : avril 2006 Messages : 515 ![]() |
OleDbType.Decimal supprime bien la décimale comme il a expliqué plus haut. Phénomène bizarre que je n'ai pas encore compris...
|
|
00
|
|
|
#15 |
|
Nouveau Membre du Club
![]() Inscription : février 2009 Messages : 109 ![]() |
Salut,
Merci binou76, ca fonctionne très bien et je suis enfin sorti de ce cercle vicieux. Effectivement sisqo60, OleDbType.Decimal me supprime la virgule ( ou point ) lors de l'insertion. J'ai donc essayé de travailler avec des double, où là j'avais des problèmes de précisions. Donc la solution de binou76 fonctionne à merveille et me permet de travailler avec des Decimal et de pouvoir les introduire en DB. |
|
|
00
|
Copyright © 2000-2013 - www.developpez.com