begin process at 2010 02 10 06:01:41
  Trouver un code source :
 
dans
 
Accueil > Forum > 

Visual Basic 6

 > 

Base de données

 > 

SQL

 > 

Problème de multiplication décimal


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

Problème de multiplication décimal

samedi 21 octobre 2006 à 17:48:36 | Problème de multiplication décimal

Compufly

Bonjour, est-ce que quelqu'un peut m'expliquer pourquoi j'ai ce problème :

PRINT 4 * 0.2
 0,8

PRINT "4" * "0,2"
 0,8

print rst2.Fields(foo) * rst1.Fields(foo)
 0,800000011920929

Lorsque : rst2.=Fields(foo) = 4 et rst1.Fields(foo) = 0,2

Je ne comprends pas pourquoi VB6 traite ces multiplications différemment.

Merci d'avance,

Compufly
samedi 21 octobre 2006 à 17:51:39 | Re : Problème de multiplication décimal

DARKSIDIOUS

Membre Club Administrateur CodeS-SourceS
convertit les nombres obtenus (bien souvent, le système de codage des nombres est différent entre une base de données et vb6 => à tout les coup, ta base de données ne sait pas comment coder correctement 0.8 (problème du complèment à deux bien connu en prog))

Donc ca donne :
rst2.=format(Fields(foo) = 4 et rst1.Fields(foo) = 0,2, "0.00")


samedi 21 octobre 2006 à 18:01:18 | Re : Problème de multiplication décimal

Compufly

rst2.=format(Fields(foo) = 4 et rst1.Fields(foo) = 0,2, "0.00")

Humph, je ne crois pas que de cette façon...

En fait, rst2.Fields contient le résultat de
SELECT * FROM [JOUEURS] WHERE POSITION = 'G';

et rst1.Fields contient le résultat de
SELECT * FROM [POINTAGE]

 Donc mon problème est que VB6 reçoit dans :
rst2.Fields(foo) la valeur 4
et
rst1.Fields(foo) la valeur 0,2

Mais quand je fais :
pointage = pointage + rst2.Fields(foo) * rst1.Fields(foo)
J'obtient le nombre
0,800000011920929

Donc le format, de quelle façon puis-je l'employer dans cet exemple si ça se tient toujours?

Compufly
samedi 21 octobre 2006 à 18:41:57 | Re : Problème de multiplication décimal

DARKSIDIOUS

Membre Club Administrateur CodeS-SourceS
ca ne change rien : la fonction format te permettra de préciser la précision de l'opération, donc ici, 2 chiffres après la virgule, ce qui évite ce problème de complément à 2, donc ca donne :

pointage = pointage + format(rst2.Fields(foo) * rst1.Fields(foo), "0.00")


samedi 21 octobre 2006 à 21:16:08 | Re : Problème de multiplication décimal

Compufly

ppj = ppj + Format(Format(rst2.Fields(foo), "0.0") * Format(rst1.Fields(foo), "0.0"), "0.0")

Me donne quand même des résultats du genre :
0,9000001

Je crois que je n'aurai pas le choix d'utiliser la fonction ROUND(rst1.Fields(foo), 1) etc.

Compufly
samedi 21 octobre 2006 à 21:18:51 | Re : Problème de multiplication décimal

Compufly

 ppj = ppj + Round(rst2.Fields(foo), 1) * Round(rst1.Fields(foo), 1)

Même cette commande me donne le même résultat.
On dirait que VB6 fait des troubles quand vient le temps de calculer des ","

Compufly
samedi 21 octobre 2006 à 21:49:48 | Re : Problème de multiplication décimal

DARKSIDIOUS

Membre Club Administrateur CodeS-SourceS
Réponse acceptée !
Cela ne vient pas "vraiment" de vb6, mais du système de codage des nombres : il est impossible de coder tout les réels sur 32 bits, du coup, vb (comme la grande majorité des langages) doivent faire une approximation des nombres pour pouvoir les stocker. Malheureusement, cela n'est pas parfait, et donne des résultats surprenants pour certains nombres.
Alors soit tu utilise la fonction Format à la fin de ton calcul (et là ca devrait marcher), soit utilise des variables String pour stocker tes nombres (ce sera moins efficace, mais au moins ca stockera les bons chiffres avec la fonction Format).




Cette discussion est classée dans : problème, fields, multiplication, décimal, foo


Répondre à ce message

Sujets en rapport avec ce message

désespéré - Problème de décimal - VB6 - Access [ par Zepp ] Bonjour,ça fait quelques temps que je suis bloqué au même endroit dans mon programme. Ce problème semble très ridicule et j'imagine qu'il doit être s problème étrange - VB6 - Access - Décimal [ par Zepp ] Bonjour,ça fait quelques temps que je suis bloqué au même endroit dans mon programme. Ce problème semble très ridicule et j'imagine qu'il doit être si Problème avec Null [ par Globig ] Bonjour.Je rencontre un problème avec l'écriture suivanteIf rs.fields(0).value is Null Then variable = 0Else variable = rs.fields(0).value * 0.01End I Problème d'enregistrement ADO et Sql Server [ par djean ] BonjourJ'ai des problèmes d'enregistrement avec mon appli.Base Sql Server et plusieurs utilisateurs.Pour enregistrer, j'appelle une procédure stockée séparateur décimal entre vba et access [ par seblh ] Bonjour, j'ai un petit problème entre access et vba.En vba, j'éxécute une requête de mise à jour ou alors d'insertion d'enregistrement. Le problème c' too many fields [ par VbAbdoul ] Bonjour,J'ai cré une appli vb qui permet de créer et d'excuter une requete dans une base Access et d'envoyer le resultat sur une feuille Excel. Mon pr problème d'espace : comment les supprimer? [ par allowen ] bonjour à tous,je veux récupère des données d'une base access et crée une macro avec vba dans excel afin de mettre ces données sur une feuille excel.L Problème avec un combobox [ par BosB ] Bonjour,je viens de passer mon appli de VB6 à VB.net, et j'ai un pb avec un combobox:CboFournisseur.AddItem(RsFourn.Fields("Nom_Fournisseur"))  : ce c ajout d'un enregistrement dans table Access [ par nono50 ] J'ai un problème avec la fonction AddNew. Au débogage, le programme s'arrète toujours dessus. Est ce que quelqu'un voit le problème là dedans:'Fonctio problème décimal [ par patchap40 ] bonjour à tous, je suis novice en vba6 (et oui encore 1), j'aimerais savoir pourquoi une valeur que j'ai entré qui devrait être décimale, s'affiche en


Nos sponsors


Sondage...

CalendriCode

Février 2010
LMMJVSD
1234567
891011121314
15161718192021
22232425262728

Consulter la suite du CalendriCode

 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,842 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales