Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1750 connectés 

  FORUM HardWare.fr
  Programmation
  VB/VBA/VBS

  Type de donnée ERREUR énorme!

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Type de donnée ERREUR énorme!

n°1246652
jerome-gmc
Posté le 16-11-2005 à 12:00:34  profilanswer
 

Boujour à tous,  
 
Savez vous que pour VBA 7.6-7.4 = 0.199999999999999 lorsque l'on ne définit pas le type de donnnée de notre variable (par défaut elle est définit pas VBA en tant que "Variant" ).  
 
Je trouve cela très dérangeant, et ce qui est encore plus dérangeant, c'est que le résultat différe, pour le type de données "single" selon que l'on affiche le résultat dans une cellule ou dans un msgbox.  
 
Quelqu'un pourrait-il m'éclairer sur cette ERREUR qui fausse beaucoup de résultats?  
 
Voici un code qui permet de vérifier le résultat de "monnombre=7.6-7.4" en fonction du type de donnée et qui affiche 2 résultats: un dans excel et un dans un msgbox:  
 
Code:  
 Sub type_donnée()
 
Dim i, j
Dim MyInteger As Integer
Dim MyLong As Long
Dim MySingle As Single
Dim MyDouble As Double
Dim MyVariant As Variant
Dim MyCurrency As Currency
 
MyInteger = 7.6 - 7.4
MyLong = 7.6 - 7.4
MySingle = 7.6 - 7.4
MyDouble = 7.6 - 7.4
MyVariant = 7.6 - 7.4
MyCurrency = 7.6 - 7.4
 
j = 1
Cells(1, j).Value = "Type de donnée"
Cells(2, j).Value = "Integer"
Cells(3, j).Value = "Long"
Cells(4, j).Value = "Single"
Cells(5, j).Value = "Double"
Cells(6, j).Value = "Variant"
Cells(7, j).Value = "Currency"
 
j = 2
Cells(1, j).Value = "Résultat de 7.6-7.4"
Cells(2, j).Value = MyInteger
Cells(3, j).Value = MyLong
Cells(4, j).Value = MySingle
Cells(5, j).Value = MyDouble
Cells(6, j).Value = MyVariant
Cells(7, j).Value = MyCurrency
 
Range("B2:B7" ).Select
    Range("B7" ).Activate
    Selection.NumberFormat = "0.000000000000000"
 
 
MsgBox "Voici le résultat de  ""monnombre = 7.6-7.4"" en  fonction du type de donnée déclaré:" _
& Chr(10) & Chr(10) & _
"Interger:" & Chr(9) & Chr(9) & MyInteger & Chr(10) & _
"Long: " & Chr(9) & Chr(9) & MyLong & Chr(10) & _
"Single: " & Chr(9) & Chr(9) & MySingle & Chr(10) & _
"Double: " & Chr(9) & Chr(9) & MyDouble & Chr(10) & _
"Variant: " & Chr(9) & Chr(9) & MyVariant & Chr(10) & _
"Currency: " & Chr(9) & MyCurrency & Chr(10)
 
 
End Sub
 
 
 
Merci d'avance.  
 
A+

mood
Publicité
Posté le 16-11-2005 à 12:00:34  profilanswer
 

n°1246770
rufo
Pas me confondre avec Lycos!
Posté le 16-11-2005 à 14:32:13  profilanswer
 

j'ai connu cette erreur lors d'un projet de fin d'études asp/vbs. Je crois que ça vient de la représentation en mémoire des nombres et des casts fait par l'interpréteur VB. En faisant une recherche, j'avais même trouvé un exe écrit par un gars qui montrait ce bug et que expliquait le pourquoi du comment, et surtout, comment contourner le pb. Mais je ne n'ai plus le lien, désolé :(...

n°1246863
jerome-gmc
Posté le 16-11-2005 à 16:05:11  profilanswer
 

Salut à tous,
 
J'ai trouvé d'ou vient le pb, en fait cela ne vient pas de VBA mais du PC et de ses soft en général. C'est due  la méthode de calcul, c'est un peu dur à expliquer donc voici un lien:  
 
 
http://support.microsoft.com/defau [...] n-us;42980
 
J'espère que cela pourra aider du monde. ;)  
 
 
 
A+


Message édité par jerome-gmc le 17-11-2005 à 09:23:03
n°1246887
mareek
Et de 3 \o/
Posté le 16-11-2005 à 16:23:00  profilanswer
 

un autre lien qui explique les erreurs d'arrondi sur les float:
http://blogs.msdn.com/ericlippert/ [...] 53000.aspx


---------------
"I wonder if the internal negative pressure in self pumping toothpaste tubes is adjusted for different market altitudes." John Carmack
n°1247123
galopin01
Posté le 16-11-2005 à 20:50:18  profilanswer
 

bonsoir,  
on corrige la plupart du temps ce problème avec :
Outils / Options / Calculs + Cocher Calcul avec la précision....
A+


---------------
roger
n°1247345
jerome-gmc
Posté le 17-11-2005 à 09:32:22  profilanswer
 

Salut à tous,
 
Galopin l'option dont tu parles n'est pas liée avec le problème d'arondi que peuvent générer les soft mais c'est juste un astuce d'excel pour gérer les options d'affichage et qui est très dangereuse à utiliser pour les novices.
 
A quoi sert cette option, un exemple:
si tu mets les cellules A1, A2 et A3 au format de cellule "nombre" avec un chiffre derrière la virgule, et que tu écris dans ces 3 cellules la formule "=1/3", tu obtiens pour chaque cellule "0.3".
Si maintenant tu fais la somme de ces 3 cellules dans la cellule A4: "=A1+A2+A3", tu obtiens:
 
Sans l'option: 1    car 1/3 + 1/3 + 1/3 = 1
Avec l'option: 0.9 car 0.3 +0.3 +0.3 = 0.9
 
 
Perso, je te tiens à mettre en garde quant à l'utilisation de cette option
 
 
A+


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  VB/VBA/VBS

  Type de donnée ERREUR énorme!

 

Sujets relatifs
Erreur quand il n'y pas d'ID en GETErreur "fonction" is multiply-defined...
Le parametre numérique pour les champs de type numeric sert à quoi ?Erreur ggc que je sais pas resoudre
erreur sqlDonnée répétée à plusieurs reprises en la notant une seule fois
Connaître le type d'un fichierLe value dans un type=file
Erreur de test avec plus de 2 : $_FILESDelphi-Crystal - Verifier type parametre
Plus de sujets relatifs à : Type de donnée ERREUR énorme!


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR