Acces 2003 kan niet rekenen

Status
Niet open voor verdere reacties.

Bilbo

Nieuwe gebruiker
Lid geworden
30 jan 2010
Berichten
3
Hallo,

Ik heb een vraag ik ben bezig met een simpele berekening in Access 2003. Het is voor een ledenregistratie programma.

'Ergens' in het programma komt de volgende formule voor:
intRest = 5 * ((intTeVerdelen / 5) - intPerGroep)

Stel: intTeVerdelen = 214 en intPerGroep = 42
dan krijg je dus: intRest = 5 * ( (214/5) - 42 )
wordt: intRest = 5 * (42.8 - 42)
wordt: intRest = 5 * 0.8 => 4

Maar wat doet Access! 42.8 - 42 = 0,799999999999997 !!! :eek:
Heeft iemand een idee wat hier fout gaat?

Groet,

Bilbo
 
Access kan wel rekenen, maar computers niet..... Dit soort afrondingsfouten kan wel vaker voorkomen; overigens heb ik de berekening nagebouwd, en bij mij klopt-ie...
zie plaatje!
 

Bijlagen

  • Reken(geen)foutje Access.jpg
    Reken(geen)foutje Access.jpg
    7,3 KB · Weergaven: 43
Hé bedankt voor je reactie!,

Het lijkt er dus op dat dit niet is op te lossen.
Toch wel apart.
Ik ga voor de grap is op een aantal machines kijken hoe die er mee omgaan.
In het plaatje zie je de rekenfoutjes die mijn computer in dit geval dan geeft.

Karel
 

Bijlagen

  • Access-rekenfoutjes.jpg
    Access-rekenfoutjes.jpg
    22,1 KB · Weergaven: 37
Het is een afwijking die in de processor van de pc kan zitten.... Het is over het algemeen een dermate kleine afwijking, dat je met afronden een heel eind komt.
 
declareer je je variabelen wel expliciet als integer?

Code:
Public Sub test()
   Dim intRest As Integer
   Dim intTeVerdelen As Integer
   Dim intPerGroep As Integer

   intTeVerdelen = 214
   intPerGroep = 42
   intRest = 5 * ((intTeVerdelen / 5) - intPerGroep)
   MsgBox intRest  'resultaat 4
End Sub

Public Sub test1()
   Dim intRest As Variant
   Dim intTeVerdelen As Variant
   Dim intPerGroep As Variant

   intTeVerdelen = 214
   intPerGroep = 42
   intRest = 5 * ((intTeVerdelen / 5) - intPerGroep)
   MsgBox intRest  'resultaat 3.99999
End Sub
 
Laatst bewerkt:
Hoi Rene,

Nee. Ik had ze niet expliciet gedeclareerd. Dacht dat dit niet perse nodig was.
Maar het is wel de oplossing blijkt!

(Ze hebben me wel eens verteld dat je eigenlijk altijd moet declareren. Ik heb nu een goede reden om die moeite voortaan maar te nemen ;) )

Karel
 
Hoi Karel,
Als je niet expliciet declareert zal VBA uitgaan van variant typen. En gedraagt zicht dan als een datum, een string of een double zoals je gezien hebt. Nou, weer wat geleerd ;)
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan