PC SOFT

FORUMS PROFESSIONNELS
WINDEVWEBDEV et WINDEV Mobile

Accueil → WINDEV (précédentes versions) → problème de résultat apres calcul entre champ
problème de résultat apres calcul entre champ
Débuté par Equilibrium, 20 mar. 2017 08:53 - 4 réponses
Membre enregistré
45 messages
Posté le 20 mars 2017 - 08:53
Bonjour,

je développe une petite application toute simple pour m'aider a calculer mes salaires
mais le résultat est étrange

j'ai créer plusieurs champs
- taux horaire ou je test avec le chiffre 10.4645
- semaine travaillées que je test avec le chiffre 52
- heures semaine avec 35
donc je remplie ses champs et mon résultat est tristement faut 1587,12
voici le code utilisé
val1 est un entier = SAI_HS
val2 est un entier = SAI_St
SAI_htm = val1 * val2 /12
SAI_sdb = SAI_tauxHoraire * SAI_htm


alors que si je simule manuellement le contenu des champs j'obtiens le bon résultat qui est 1587.15
bien entendu je me suis dis que c'est un problème de masque, du coup j'ai tout testé mais non
je suis près a parier que c'est une erreur de ma part tout simple sur un de mes champs mais je trouve pas

merci d'avance
Message modifié, 20 mars 2017 - 08:55
Membre enregistré
45 messages
Posté le 20 mars 2017 - 08:54
pour info bien entendu que j'aurai normalement fait tout ca en une ligne de code mais j'ai tout séparer pour tester les différent résultat afin de trouver l'erreur
Posté le 20 mars 2017 - 10:24
Bonjour

Votre problème se situe au niveau des arrondis.
Si je fais le calcul tel que vous le montrez, j'obtiens bien 1587.11583333... ce qui fait bien en arrondi final 1587.12
Si vous voulez obtenir 1587.15, vous devez gérer vos arrondis.
Votre code devient alors
SAI_htm = Arrondi(val1 * val2 /12,2)
SAI_sdb = Arrondi(SAI_tauxHoraire * SAI_htm,2)

Là vous obtiendrez comme résultat 1587.15

Bon dev.

Laurent M.
Membre enregistré
2 566 messages
Popularité : +222 (260 votes)
Posté le 20 mars 2017 - 10:52
Bonjour,

Il te manque un arrondi pour val2/12. Le calcul fait par Windev est bon et logique:
35*52/12 = 151,66666666666666666666666666667
151,66666666666666666666666666667 * 10.4645 = 1587,1158333333333333333333333333 soit 1587.12


Par contre
35*Arrondi(52/12,2) = 151.67
151.67*10.4645 = 1587,150715 soit 1587.15


Comme quoi quelques microns finissent par donner du décalage...
val1 est un entier = SAI_HS
val2 est un entier = SAI_St
SAI_htm = val1 * Arrondi(val2 /12,2)
SAI_sdb = Arrondi(SAI_tauxHoraire * SAI_htm,2)


--
Cordialement,

Philippe SAINT-BERTIN
Géode Informatique
Message modifié, 20 mars 2017 - 10:54
Posté le 20 mars 2017 - 12:23
Bonjour

déjà faire des calculs dans des champs est une mauvaise idée

Déclare des variables de type numérique haute précision, fais tes
calculs dedans PUIS afecte ton résultat dans ce que tu veux

Cordialement


--
Fabrice Harari
Consultant WinDev, WebDev et WinDev Mobile International

A votre disposition : WXShowroom.com, WXReplication (open source) et
maintenant WXEDM (open source)

Plus d'information sur http://fabriceharari.com


Le 3/20/2017 à 4:52 AM, Philippe SB a écrit :
Bonjour,

Il te manque un arrondi pour val2/12. Le calcul fait par Windev est bon
et logique:
35*52/12 = 151,66666666666666666666666666667
151,66666666666666666666666666667 * 10.4645 =
1587,1158333333333333333333333333 soit 1587.12


Par contre
35*Arrondi(52/12,2) = 151.67
151.67*10.4645 = 1587,150715 soit 1587.15


Comme quoi quelques microns finissent par donner du décalage...
val1 est un entier = SAI_HS
val2 est un entier = SAI_St
SAI_htm = val1 * Arrondi(val2 /12,2)
SAI_sdb = Arrondi(SAI_tauxHoraire * SAI_htm,2)


--
Cordialement,

Philippe SAINT-BERTIN
Géode Informatique