Toutes les variables sont de type double et on a en saisie :
s_nb_h : 10
s_sal_base : 82.7
s_css : 10
La traçage des variables m'indique bien que salaire_base 82.7 et que abs_css 82.7
Alors est ce que qqun saurait m'expliquer pourquoi VB me donne comme résultat : total_brut = 1.4210854715202E-14
C'est certainement lié au type des variables mais je n'arrive pas à trouver une solution sachant que je ne veux pas arrondir a cause des calculs qui suivent... J'ai essayé de bidouiller mais de trucs mais sans succès et là je suis un peu à cours d'idées...
cs_DARKSIDIOUS
Messages postés15814Date d'inscriptionjeudi 8 août 2002StatutMembreDernière intervention 4 mars 2013130 21 sept. 2006 à 11:25
Comme je le dit, c'est un problème du complèment à 2 :
1.4210854715202E-14 = 0.000000000000001421085...
Bref, c'est égal à 0, MAIS à cause du système de chiffrement en binaire des nombres, il se peut qu'il y ai un léger reste à cause du codage des nombres intervenant dans la soustraction, ce qui donne au final un résultat très légérement faux.
De toutes facons j'ai un peu tout essayé, le problème n'est pas si simple...
Effectivement jrivet, j'aimerais bien que 82.7 - 82.7 me retourne 0 et au lieu de ca VB me renvoi cette valeur extrèmement proche de 0 mais qui fausse tous les calculs suivants...
D'ailleurs si par la suite si j'essai d'arrondir j'ai encore un truc bizarre :
cs_DARKSIDIOUS
Messages postés15814Date d'inscriptionjeudi 8 août 2002StatutMembreDernière intervention 4 mars 2013130 21 sept. 2006 à 10:32
problème du complément à 2 ??? Certains nombres ne peuvent pas être codé sur les bits d'un double => la plupart des langages de prog doivent arrondir au nombre s'y approchant le plus...
drikce06
Messages postés2236Date d'inscriptionlundi 29 mai 2006StatutMembreDernière intervention29 mai 200810 21 sept. 2006 à 11:00
Normalement tout fonctionne très bien, ça doit venir d'un bout de ton code qui met la.........! Met tout ton code avec les déclarations etc.... Car moi je pense que ça vient forcément de là! Car 82.7/10 ou des calculs équivalent c'est pas la mer à boire pour VB comme même! Sinon c'est inquiétant!
mr_saturne
Messages postés9Date d'inscriptionmercredi 14 avril 2004StatutMembreDernière intervention21 septembre 2006 21 sept. 2006 à 11:04
Arf...
Le truc c'est que j'avais déjà trouvé que la fonction Round de VB était buggée (Round(0.125, 2)=0.13 mais Round(0.135, 2)=0.13, ou qqchose de ce genre) donc j'utilise une fonction spéciale pour arrondir qui me donne les résultats que j'ai mis plus haut...
De toutes facons le problème c'est que je veux pas arrondir car si le résultat est différent de zéro j'ai besoin du résultat exact pour la suite des calculs...
Par contre si mon problème vient effectivement du type Double est ce que je peux en utiliser un autre qui marcherais? Si oui lequel?
Je montre ma fonction d'arrondi quand même, juste pour le pricipe :
Public Function ReyRound(Value, Optional Size) As Double
Dim Factor As Long
Dim Unit As Double
Dim Resultat As Double
If Not IsNumeric(Value) Then
If IsNull(Value) Then
Value = 0
Else
Value = Val(Value)
End If
End If
If IsMissing(Size) Then
Factor = 1
Unit = 0
Else
Factor = Val("1" & String(Size, "0"))
Unit = Val("0." & String(Size - 1, "0") & "1")
End If
Resultat = (Val(Value * Factor) / Factor)
If CDbl(Resultat & "5") <= Value Then
ReyRound = Resultat + Unit
Else
ReyRound = Resultat
End If