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...
drikce06
Messages postés2236Date d'inscriptionlundi 29 mai 2006StatutMembreDernière intervention29 mai 200810 21 sept. 2006 à 11:09
Salut le probleme peut venir d'ici, j'ai eu le probleme récement avec val() encore une fois à cause des paramètres régionaux! Val fonctionne mal avec la , mais marche avec le point! donc du coup voit avec ton prog pour modifier les paramètres régionaux au début du prog et tu les remets à la fin! Moi c'est ce que j'ai fait et du coup plus de probleme!
drikce06
Messages postés2236Date d'inscriptionlundi 29 mai 2006StatutMembreDernière intervention29 mai 200810 21 sept. 2006 à 11:16
Moi c'était avec VBA mais je pense que ça marche aussi avec vb6. Donc pour le changer à l'ouverture du classeur c'est dans sub auto_open et pour le changer à la fin c'est auto_close.
J'ai fait ça à partir d'une source du forum.
Private Declare Function GetLocaleInfo Lib "kernel32" Alias "GetLocaleInfoA" (ByVal Locale As Long, _
ByVal LCTYPE As Long, ByVal lpLCData As String, ByVal cchData As Long) As Long
Private Declare Function SetLocaleInfo Lib "kernel32" _
Alias "SetLocaleInfoA" _
(ByVal Locale As Long, _
ByVal LCTYPE As Long, _
ByVal lpLCData As String) As Long
Private Declare Function GetSystemDefaultLCID Lib "kernel32" () As Long
Private Declare Function GetUserDefaultLCID Lib "kernel32" () As Long
Public ParametreRegional1 As String
Private Const LOCALE_SDECIMAL = &HE 'séparateur décimal
Private Function ParametreRegional(parametre As Long) As String
Dim lngResultat As Long
Dim buffer As String
Dim pos As Integer
Dim Locale As Long
'récupère l'identifiant de l'information locale de type utilisateur
Locale = GetUserDefaultLCID()
'renvoie le nombre de caractères nécessaire pour recevoir la valeur du paramètre demandé
lngResultat = GetLocaleInfo(Locale, parametre, buffer, 0)
ParametreRegional1 = ","
toto = SetUserLocaleInfo(&HE, ".")
Else
ParametreRegional1 = "."
End If
End Function
Private Function IniLocaleID(sType As String) As Long
Dim lLocalDefault As Long
Select Case UCase(sType)
Case "SYSTEM"
'Système local.
lLocalDefault = GetSystemDefaultLCID()
Case "USER"
'Utilisateur local
lLocalDefault = GetUserDefaultLCID()
End Select
IniLocaleID = lLocalDefault
End Function
Function SetUserLocaleInfo(LCTYPE As Long, vValue As Variant) As Boolean
drikce06
Messages postés2236Date d'inscriptionlundi 29 mai 2006StatutMembreDernière intervention29 mai 200810 21 sept. 2006 à 11:39
Ca me parait tout de même très bizzard j'ai une application certe en VBA qui a le même principe! Je récupére des valeurs dans des zones de texte, les calculs sont les mêmes voir plus compliqués avec des nombres avec une dizaine de chiffre après la virgule et le résultat est le bon même apres dix chiffres après la virgule!
Drikce 06
Vous n’avez pas trouvé la réponse que vous recherchez ?
mr_saturne
Messages postés9Date d'inscriptionmercredi 14 avril 2004StatutMembreDernière intervention21 septembre 2006 21 sept. 2006 à 11:56
Bon je pense que Darksidious a raison.
La très légère perte de précision m'ennuie un peu mais ca devrait pas trop avoir de conséquences sur le reste, de toutes facons je vois pas trop d'autres solutions...
Merci à tous pour votre aide, maintenant je vais aller poser une bombe chez Microsoft
cs_DARKSIDIOUS
Messages postés15814Date d'inscriptionjeudi 8 août 2002StatutMembreDernière intervention 4 mars 2013130 21 sept. 2006 à 13:02
cela n'est pas innérent à vb6, la plupart des langages ont ce type de problème : vu qu'on ne pas pas coder tout les nombres sur les 32 bits d'un double, le langage est bien obligé de faire des approximation sur certains nombres.