Bonjour a tous, Je vous expose un problème auquel je fais actuellement face.
Je suis en train de coder une caisse enregistreuse assez basique.
Cliquez pour révéler
Cliquez pour masquer
Tout va bien jusque là. elle fonctionne bien et est rapide dans ses calculs, Aucun souci.
J'ai ajouté la fonction "Supprimer un évènement (Ou ticket)" qui fonctionne bien, Mais qui retourne certaines fois un nombre incohérent.
1.4-1.4=-4.44089209850063e-016
Ce résultat arrive seulement si:
- Le dernier item supprimé a la même valeur que le Total du chiffre d'affaire (Donc, chaque fois)
- L'un des items supprimés avait un ID inférieur a l'item supprimé précédemment
- Plus de 3 items étaient présent dans la ListBox avant la première suppression
Logs d'ajout/Suppression des Items.
Cliquez pour révéler
Cliquez pour masquer
> 0.70€ added. Temp total: 0.7€
> 0.50€ added. Temp total: 1.2€
> 0.20€ added. Temp total: 1.4€
!> 0.20: Café / Thé
!> 0.50: Barres Ch.
!> 0.70: Boisson
!> 1.4€ added. New amount: 1.4€
!> 1.4€ added in Total
> 0.20€ added. Temp total: 0.2€
> 0.50€ added. Temp total: 0.7€
> 0.70€ added. Temp total: 1.4€
!> 0.20: Café / Thé
!> 0.50: Barres Ch.
!> 0.70: Boisson
!> 1.4€ added. New amount: 2.8€
!> 1.4€ added in Total
> 0.20€ added. Temp total: 0.2€
> 0.70€ added. Temp total: 0.9€
> 0.70€ added. Temp total: 1.6€
!> 0.20: Café / Thé
!> 0.70: Boisson
!> 0.70: Boisson
!> 1.6€ added. New amount: 4.4€
!> 1.6€ added in Total
> 0.50€ added. Temp total: 0.5€
> 0.70€ added. Temp total: 1.2€
> 0.20€ added. Temp total: 1.4€
!> 0.20: Café / Thé
!> 0.50: Barres Ch.
!> 0.70: Boisson
!> 1.4€ added. New amount: 5.8€
!> 1.4€ added in Total
!> Deleting: 2
>> Calculating: 5.8-1.6=4.2
!> Deleting: 1
>> Calculating: 4.2-1.4=2.8
!> Deleting: 0
>> Calculating: 2.8-1.4=1.4
!> Deleting: 0
>> Calculating: 1.4-1.4=-4.44089209850063e-016
Mon calcul est fait comme ceci:
Func Calc($a, $b, $operator)
ConsoleWrite(">> Calculating: " & $a & $operator & $b & "=")
If $operator = "+" Then
$return = ($a + $b)
ElseIf $operator = "-" Then
$return = ($a - $b)
ElseIf $operator = "/" Then
$return = ($a / $b)
ElseIf $operator = "*" Then
$return = ($a * $b)
EndIf
ConsoleWrite($return & @CRLF)
Return $return
EndFunc ;==>Calc
Je crois a une blague satanistes orchestrée par les loutres sanguinaires du Mordor dans le but de me rendre fou.
Des idées?