Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum. Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

Sujet : Bug instruction Fix dans VB5 [ Archives Visual Basic / Maths ] (forrestier2003)

vendredi 24 février 2006 à 09:51:56 | Bug instruction Fix dans VB5

forrestier2003

Bonjour,

Je n'y comprends rien ou est-ce un bug MicroSoft ?

Pour tronquer un nombre positif  2 chiffres après la virgule j'utilisais :
        dblA = Fix(dblA * 100) / 100
jusqu'à ce que A soit égal à 267.28 et que j'obtienne 267.27.

Pour débugger mon code j'ai réécrit : 

        Dim dblA As Double, dblB As Double, dblC As Double, dblD As Double
       
        dblA = 267.28
       
        dblB = dblA * 100   'on obtient 26728
        dblC = Fix(dblB)    'on obtient 26727 !!!!!!!!
        dblD = dblC / 100   'on obtient 267,27

Une explication ?
Et sur les nouveaux VB ?
       

vendredi 24 février 2006 à 10:36:29 | Re : Bug instruction Fix dans VB5

Julien39

Membre Club
Idem en VB6, je cherche s'il y a une explication, c'est probablement les arrondis, j'ai eu ce probleme il y a quelque temps quand j'ai voulu faire la fonction Round de vb6 avec cette méthode.

vendredi 24 février 2006 à 10:45:46 | Re : Bug instruction Fix dans VB5

Julien39

Membre Club
C'est très étrange,     fix(100*267,28)=26727
                                fix(26728)=26728
Idem avec int

vendredi 24 février 2006 à 10:58:48 | Re : Bug instruction Fix dans VB5

Vb Lover

tout ça doit reposer sur l'utilisation des Double... par contre, je suis quasiment sûr qu'avec un "Int" au lieu du "Fix", ça doit marcher (je n'ai pas VB sous la main pour vérifier):

int(dblA*100)/100

au pire (mais vraiment en dernier recours), il suffit d'ajouter un petit "epsilon" (aïe aïe, je suis trop mathématicien moi...), du genre:

epsilon = 0.000001
int(dblA*100+epsilon)/100

parce que la précision informatique n'est pas aussi rigoureuse qu'une valeur mathématique exacte...

les maths, c'est tellement plus mieux


vendredi 24 février 2006 à 11:41:36 | Re : Bug instruction Fix dans VB5

pcpt

Administrateur CodeS-SourceS
salut,
FIX arrondi à l'inférieur, INT au supérieur.


Dim dblA As Double, dblB As Double
dblA = 267.28
dblB = (dblA * 100) / 100 'retourne 267,28
dblB = (dblA * 100) \ 100 'retourne 267


vendredi 24 février 2006 à 13:16:37 | Re : Bug instruction Fix dans VB5

Julien39

Membre Club
Chez moi FIX et INT c'est du pareil au même
et sans déclaration en Double sa ne change rien

vendredi 24 février 2006 à 14:02:45 | Re : Bug instruction Fix dans VB5

pcpt

Administrateur CodeS-SourceS
cool .....



çà te donne le même résultat çà?

Const d As Double = -1.9000489

MsgBox Int(d)
MsgBox Fix(d)






MSDN :



Int, Fix, fonctions

       

Renvoie la partie entière d'un nombre.

Syntaxe

Int(number)

Fix(number)

L' argument number peut contenir une valeur de type Double ou toute autre expression numérique valide. Si l'argument number contient une valeur de type Null, Null est renvoyé.

Remarques

Les fonctions Int et Fix suppriment toutes deux la partie fractionnelle de l'argument number et renvoient l'entier obtenu.

Différence entre les fonctions Int et Fix : si number est négatif, Int renvoie le premier entier négatif inférieur ou égal à number, alors que Fix renvoie le premier entier négatif supérieur ou égal à number. Par exemple, Int convertit -8,4 en -9 et Fix convertit -8,4 en -8.

Fix(number) équivaut à :

Sgn(number) * Int(Abs(number))


vendredi 24 février 2006 à 14:18:16 | Re : Bug instruction Fix dans VB5

Julien39

Membre Club
Là d'accord quand je disait que int et fix étaient équivalent, je ne le disait que pour ce cas en particulier car 100*267.28 n'est pas négatif. De plus 100*267.28=26728
or int(100*267.28) est différent de int(26728), ce qui est impossible.
Cela revient à dire q'il existe x tel que E(x)<>E(x) alors que la partie entiere à la propriété d'unicité.

vendredi 24 février 2006 à 14:57:19 | Re : Bug instruction Fix dans VB5

pcpt

Administrateur CodeS-SourceS
re-cool...
et depuis quand en programmmation on parle de fonctions qui marchent "pour ce cas" et pas pour d'autres.....

c'est pas important tout çà. la demande de Forrestion2003 portait sur Fix, VbLover a soulevé le point de la différence avec Int, et ci-dessus l'explication MSDN ;)

bonne continuation à tous

vendredi 24 février 2006 à 16:30:16 | Re : Bug instruction Fix dans VB5

Julien39

Membre Club

pcpt, je ne sais pas si c'est volontaire ou bien si c'est une habitude de ne pas répondre aux questions et de déplacer le problème mais quand on te dit qu'il y a un problème pour la valeur 100*267,27
C'est cette valeur qui nous intéresse et -1.9000489 n'a aucun intérêt.
Je le redit avec plus de justesse : pour la valeur qui nous intéresse et qui pose problème la fonction int est équivalente à la fonction fix.



1 2

Cette discussion est classé dans : bug, double, fix, dbla, dblb


Répondre à ce message

Sujets en rapport avec ce message

Lancement de mon prog au double clic sous windows [ par JuB ] C'est pas tout à fait ça mais je voulais faire court dans le sujet.Sous l'explorateur, quand vous double cliquez sur un fichier, le programme correspo Bug d'un setup.exe généré avec le PDW de VB6 [ par maddogrp ] J'ai créé un programme d'installation avec le 'Package and Deployment Wizard' de VB6 sous Windows NT 4. Ce prog. marche parfaitement sous W95 et NT4, Double buffering en visual basic ? [ par Christian ] Lorsqu'on veut créer une petite animation en affichant , puis en effaçant successivement les images dessinées , un scintillement désagréable se produi Double buffering en visual basic [ par Christian ] Lorsqu'on veut créer une petite animation en affichant , puis en effaçant successivement les images dessinées , un scintillement désagréable se produi HELP !!!!!! double Controle MCI !!!!!!! [ par schouly ] Il est possible de controler un lecteur de CD rom avec un control MCI mais comment faire pour en controller 2 (D: et E: par exemple) avec 2 controles Bug ou pas Bug [ par Meskine ] Bonjours;y-t-il une personne qui a rencontré ce genre de bugSUB TEST() dim x as long x=32767+2END SUBle message suivant apparait : "ERROR ??? depaceme double click sur un node de treeview [ par DEL ] comment simuler ou créer un dbleclick sur un node de treeview ???merci d'avance DEL Comment affecter des valeurs supérieures à 32000 ? [ par sb ] Je cherche à détourner le Bug qui fait que les valeurs sont bloquées à 32000:A=32000A+1=BUG


Nos sponsors

Sondage...

CalendriCode

Juillet 2009
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
2728293031  

Consulter la suite du CalendriCode

Téléchargements

Logiciels à télécharger sur le même thème :

Comparez les prix Nouvelle version

Photothèque Nouveau !



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
Temps d'éxécution de la page : 0,437 sec

Google Coop CodeS-SourceS Google Coop CodeS-SourceS


Certaines images présentes sur le site (notament certains avatars) sont issues des collections IconShock, donc si vous souhaitez utiliser ces icons vous devez les acheter, ne les copiez pas et ne utilisez pas dans vos sites et applications sans les avoir commandé.