PDA

Volledige versie bekijken : foutje bij het optellen


megakiek
%Europe/Berlin %570 %2005, 14:41
ik probeer een soort "rekenmachientje" te maken om een richtprijs te laten berekenen.
nu dat lukt redelijk op enkele dingen na.

ik heb een knopje dat je aan of uit zet al naargelang je het artikel erbij wil of niet
nu er zullen meerdere knoppen komen maar nu werk ik met drie
en nu komt het probleem.
zolang ik met 1 knop werk en aan of uit zet loopt alles prima.
wanneer ik echter met twee koppen begin te werken en ik zet eerst een of meerdere aan en daarna wil ik alles uitzetten.... dan loopt het fout
dan komt het er op neer dat
10-10 plots niet meer nul is maar 1.77635683940025e-15

enig idee hoe dit kan komen?????


:confused:

theFlashWizard
%Europe/Berlin %691 %2005, 17:35
zulle we toch eerst wat script moeten zien..

Nowan
%Europe/Berlin %693 %2005, 17:38
zulle we toch eerst wat script moeten zien..

idd, laat het script zien, vermoedelijk ommdat er bepaalde waarden zijn die blijven steken zijn...

die moet je dan eerst wissen / aanpassen :)

megakiek
%Europe/Berlin %298 %2005, 08:09
wel ip plaatste hem in ene gigantische zip van 9kb
en je vind hem hier (http://www.di-athos.be/tm2.zip)

dank bij voorbaat

theFlashWizard
%Europe/Berlin %319 %2005, 08:40
owke.. dat is vaag..
ik heb het geheel nog ff wat tacktischer in mekaar gezet.. kan nog veeel beter maja.. dat zal je gok ik niet zoveel uitmaken..
dit is het script dat ik nu gebruik:

totaal = 0;
A = 6
for(i=1;i<=A;i++){
keuze = this["keuze"+i]

keuze.onRelease = function(){
trace("___")
trace(totaal)
trace("- "+this.prijs)
if(this._currentframe == 1){
totaal+=this.prijs
this.gotoAndStop(2)
totaal_txt.text = totaal
}else{
totaal-=this.prijs
this.gotoAndStop(1)
totaal_txt.text = totaal
}
trace("= "+totaal)
}
}

dit is de uitkomst als ik klik op: keuze 4,5,6en dan weer keuze 4,5,6 :
___
0
- 8.4
= 8.4
___
8.4
- 8.4
= 16.8
___
16.8
- 8.4
= 25.2
___
25.2
- 8.4
= 16.8
___
16.8
- 8.4
= 8.4
___
8.4
- 8.4
= 3.5527136788005e-15


heel apart dus.. :S
fla == zip == bijlage

owja als ik het getal voordat ik het in het textfield afrond (Math.round(totaal)) dan heb je dit probleem niet.. maar gezien we met cijfers achter de komma's moeten werken is dat geen optie..

megakiek
%Europe/Berlin %347 %2005, 09:20
ik zie niet echt in hoe de oplossing op deze manier dichterbij komt
ik zie enkel een bevestiging dat het op, een voor mij veel moeilijker manier, eenzelfde fout oplevert..... :(

toch bedankt....

Heb ik nu per toeval een bug ontdekt looooool

sanderH
%Europe/Berlin %375 %2005, 10:01
hmm vreemd. als workaround zou je eventueel (Math.round(totaal * 100)) kunnen doen en dan na de berekening de uitkomst weer door 100 delen ;) (indien je 2 cijfers achter de komma wil) maar of dat nou zo netjes is......

Flasher
%Europe/Berlin %473 %2005, 12:21
als je alle prijzen afrondt naar hele getallen geeft het geen problemen, vreemd

Laiverd
%Europe/Berlin %510 %2005, 13:15
Ik heb van de bug nog nooit gehoord, maar het lijkt er inderdaad erg op dat je geconfronteerd wordt met een afrondingsfout. Ik denk dat de oplossing vrij simpel is; zelf afronden en het niet door de Flashplayer laten doen.
In onderstaand voorbeeld kreeg ik niet meer die rare uitkomst:
roundDecimals = function(number, decPlaces) {
round = (Math.round(number * Math.pow(10, decPlaces))) / Math.pow(10, decPlaces);
return round;
};
var totaal = 0;
plus_mc.onPress = function() {
totaal = roundDecimals(totaal + 8.4, 2);
tot_txt.text = totaal;
};
min_mc.onPress = function() {
totaal = roundDecimals(totaal - 8.4, 2);
tot_txt.text = totaal;
};
John

megakiek
%Europe/Berlin %528 %2005, 13:41
and where am i supposed to place this .....
optellen kan ik maar zo een scripts .... jawadde....
je zal mss gezien hebben aan mijn fla-ke..... kben maar een "kwaffeurke" he

Laiverd
%Europe/Berlin %560 %2005, 14:26
De functie plaats je op de hoofdtijdlijn in het eerste frame. En waar je nu hebt:

totaal+=this.prijswordt dat
totaal = roundDecimals(totaal + this.prijs, 2);Voor een "kwaffeurke" is het dan wel uit te vogelen wat er met totaal-=this.prijs moet gebeuren ;)

John