Door
Karel Bijvelds
op 25-06-2015 15:45
gewijzigd op 25-06-2015 15:55
1.709 views
Hallo,
Ik kom een probleem tegen bij het verwerken van mutaties. Dit probleem heb ik teruggebracht tot onderstaand script, hetgeen de output levert zoals onder is weergegeven (behalve de kleur dan).
Regel 3*3,29 en 6*3,29 worden weergegeven met ONGELIJK, maar volgens mij zouden deze ook gelijk moeten zijn.
Een prijs wordt vermenigvuldigd met het aantal en gecontroleerd met het opgegeven bedrag.
Er zit een conversie in (komma naar punt).
Een andere prijs opvoeren in $a (bv 1,11) geeft weer andere regels als verschil; $a = "1,23" geeft alles goed.
Al dagen aan het zoeken!
Wat doe ik fout?
[size=xsmall]Toevoeging op 25/06/2015 16:04:01:[/size]
Karel Bijvelds op 25/06/2015 15:45:26
Hallo,
Ik kom een probleem tegen bij het verwerken van mutaties. Dit probleem heb ik teruggebracht tot onderstaand script, hetgeen de output levert zoals onder is weergegeven (behalve de kleur dan).
Regel 3*3,29 en 6*3,29 worden weergegeven met ONGELIJK, maar volgens mij zouden deze ook gelijk moeten zijn.
Een prijs wordt vermenigvuldigd met het aantal en gecontroleerd met het opgegeven bedrag.
Er zit een conversie in (komma naar punt).
Een andere prijs opvoeren in $a (bv 1,11) geeft weer andere regels als verschil; $a = "1,23" geeft alles goed.
Al dagen aan het zoeken!
Wat doe ik fout?
De verwijzing van Ward van der Put gevolgd en bekeken.
Als oplossing kies ik voor het standaardiseren van de uitkomsten en deze dan te vergelijken.
Zo loopt iig mijn script.
Indien iemand een elegantere oplossing heeft dan verneem ik dat graag.
een vergelijking van strings maakt, dan gaat het wel goed:
if (''.$bedrag != ''.$controlebedrag)
Je overtreedt anders een van de regels voor floating-point logica: vergelijkingen van gelijkheden of ongelijkheden zijn bij floats onnauwkeurig en daardoor onbetrouwbaar.
Verder kun je de nauwkeurigheid op twee manieren opvoeren:
• Gebruik absolute getallen, dus integers, want die zijn wél nauwkeurig. Aangezien je met bedragen rekent, kun je die bijvoorbeeld met 1000 vermenigvuldigen, daarna je berekeningen uitvoeren en tot slot de uitkomsten weer door 1000 delen bij de weergave. (Met de nadruk op weergave, zoals Ivo ook zegt.)
Ik heb de BC_Math-functies toegepast.
Zonder de bcmul-functie in regel 7 valt ie ook in de GELIJK-tak, maar voor uniformiteit (en misschien wel noodzaak) ook hier de BC_Math_functies gebruikt.
Current PHP version: 5.4.16
GELIJK: 9.87 = 9.87=3*3.29
[size=xsmall]Toevoeging op 26/06/2015 10:53:42:[/size]
Karel Bijvelds op 26/06/2015 10:52:56
Dank voor de oplossing,
Ik heb de BC_Math-functies toegepast.
Zonder de bcmul-functie in regel 7 valt ie ook in de GELIJK-tak, maar voor uniformiteit (en misschien wel noodzaak) ook hier de BC_Math_functies gebruikt.