Discussion:
in vba naar boven afronden
(te oud om op te antwoorden)
keesb
2004-12-02 09:13:16 UTC
Permalink
heb een veld [aantal] dit wordt weergegeven in 3 decimalen. dit moet worden
afgerond naar boven in een heel getal. dus 2,123 geeft als resultaat 3

Ik heb dit in vba nodig
Het lukt me niet, iemand een oplossing?

kees
Eric Wattez
2004-12-02 11:31:07 UTC
Permalink
Je kan getal afronden op basis van type variabel. In dit geval zou
Afgerond=Cint(getal).

Hou er wel rekening mee dat Access afrond tot .5. Dus als je altijd naar
boven wil afronden moet je er eerst 0,5 bij optellen.

Afgerond=Cint(getal+0,5).

Suc6
Post by keesb
heb een veld [aantal] dit wordt weergegeven in 3 decimalen. dit moet worden
afgerond naar boven in een heel getal. dus 2,123 geeft als resultaat 3
Ik heb dit in vba nodig
Het lukt me niet, iemand een oplossing?
kees
John Kopmels
2004-12-02 17:10:42 UTC
Permalink
Post by keesb
heb een veld [aantal] dit wordt weergegeven in 3 decimalen.
dit moet worden afgerond naar boven in een heel getal.
dus 2,123 geeft als resultaat 3 Ik heb dit in vba nodig

Int([Aantal])+1
of
Fix([Aantal])+1

groetjes -- John
keesb
2004-12-03 07:54:37 UTC
Permalink
beide bedankt,

Kees
Post by John Kopmels
Post by keesb
heb een veld [aantal] dit wordt weergegeven in 3 decimalen.
dit moet worden afgerond naar boven in een heel getal.
dus 2,123 geeft als resultaat 3 Ik heb dit in vba nodig
Int([Aantal])+1
of
Fix([Aantal])+1
groetjes -- John
Eric Wattez
2004-12-03 07:57:02 UTC
Permalink
Probeer

Int([aantal]+0,5)

suc6
Post by John Kopmels
Post by keesb
heb een veld [aantal] dit wordt weergegeven in 3 decimalen.
dit moet worden afgerond naar boven in een heel getal.
dus 2,123 geeft als resultaat 3 Ik heb dit in vba nodig
Int([Aantal])+1
of
Fix([Aantal])+1
groetjes -- John
keesb
2004-12-03 11:47:09 UTC
Permalink
het lukt niet, heb nu de wiskunde maar uit de kast gehaald

Me!aantal = Round(([OrderAantal] + 0.005), 0)

dit gaat goed.

Kees
Post by Eric Wattez
Probeer
Int([aantal]+0,5)
suc6
Post by John Kopmels
Post by keesb
heb een veld [aantal] dit wordt weergegeven in 3 decimalen.
dit moet worden afgerond naar boven in een heel getal.
dus 2,123 geeft als resultaat 3 Ik heb dit in vba nodig
Int([Aantal])+1
of
Fix([Aantal])+1
groetjes -- John
jan
2004-12-03 15:13:27 UTC
Permalink
Kees,

Deze gaat echt goed:

-Int(-[OrderAantal])

Int rond namelijk af naar hele getallen en wel naar het eerste hele getal
kleiner dan (of gelijk aan) het af te ronden getal.
Het negatieve getal -2,123 wordt door Int afgerond naar -3

-Int(-[OrderAantal]) rond daardoor het getal 2,123 af naar 3


Jouw eigen fomule lijkt me toch niet af te ronden naar boven

Me!aantal = Round(([OrderAantal] + 0.005), 0)
2,123 wordt daarmee 2 en dat was dacht ik niet wat je vroeg.

Jan
keesb
2004-12-07 07:18:15 UTC
Permalink
ben even afwezig geweest en heb het laatste stukje discussie even gemist.
Het lijkt er nu inderdaad op dat de oplossing van Jan goed werkt. Negatieve
bedragen komen niet voor.
Het wordt gebruikt om verpakkingseenheden te berekenen per 1000 stuks. dus
b.v. 1000 stuks = 1 en dus 1 verpakking. 1001 is 1,001 en dus een 2e
verpakking.
Mijn wiskundige berekening werkte niet, ik weet dat het rekenkundig ook op
te lossen is, maar ben blijkbaar al te lang van school om me dat precies te
herinneren ;-(
het was iets als: eerst delen, dan een decimaal getal erbij optellen, dan
afronden en dan weer vermenigvuldigen met het zelfde getal als waardoor
gedeeld was. Maar goed allen dank voor jullie tijd en Jan bedankt voor de
uiteindelijke oplossing.

Kees
Post by jan
Kees,
-Int(-[OrderAantal])
Int rond namelijk af naar hele getallen en wel naar het eerste hele getal
kleiner dan (of gelijk aan) het af te ronden getal.
Het negatieve getal -2,123 wordt door Int afgerond naar -3
-Int(-[OrderAantal]) rond daardoor het getal 2,123 af naar 3
Jouw eigen fomule lijkt me toch niet af te ronden naar boven
Me!aantal = Round(([OrderAantal] + 0.005), 0)
2,123 wordt daarmee 2 en dat was dacht ik niet wat je vroeg.
Jan
XPS35
2004-12-07 08:01:09 UTC
Permalink
Post by keesb
ben even afwezig geweest en heb het laatste stukje discussie even gemist.
Het lijkt er nu inderdaad op dat de oplossing van Jan goed werkt. Negatieve
bedragen komen niet voor.
Het wordt gebruikt om verpakkingseenheden te berekenen per 1000 stuks. dus
b.v. 1000 stuks = 1 en dus 1 verpakking. 1001 is 1,001 en dus een 2e
verpakking.
Mijn wiskundige berekening werkte niet, ik weet dat het rekenkundig ook op
te lossen is, maar ben blijkbaar al te lang van school om me dat precies te
herinneren ;-(
het was iets als: eerst delen, dan een decimaal getal erbij optellen, dan
afronden en dan weer vermenigvuldigen met het zelfde getal als waardoor
gedeeld was. Maar goed allen dank voor jullie tijd en Jan bedankt voor de
uiteindelijke oplossing.
Kees
Ik haak wat laat in, maar kan het niet nalaten met wat mosterd na de
maaltijd te komen. Mijn voorstel:

IIf([aantal]-Int([aantal])=0,Int([aantal]),Int([aantal])+1)
--
Groeten,

Peter
John Kopmels
2004-12-03 19:23:46 UTC
Permalink
Post by keesb
het lukt niet, heb nu de wiskunde maar uit de kast gehaald
Round(([Aantal] + 0.005), 0) dit gaat goed.
nou die wiskunde heeft dan een vreemde logica

dat werkt *niet* altijd, niet indien drijvende deel < 0,5
Round((2,123 + 0.005), 0) geeft 2 ipv de gewenste 3
------------------------------------------------------------

zowel Int als Fix gooien alles na de komma weg
en overblijvende + 1 geeft precies wat je vraagt

cint werkt alleen met integers tot 32767 (+ of -)

graag een voorbeeld wat niet werkt, hier werkt alles wel

van alle andere antwoorden werkt alleen die van Jan ook goed

groetjes -- John
jan
2004-12-03 19:43:27 UTC
Permalink
John,

Leuk dat je mijn bijdrage óók goed noemt, maar helaas denk ik dat die van
jou niet helemaal doet wat gewenst is.

Int([aantal]) + 1 levert, als aantal 2 is, 3 op en niet de gewenste 2

Dit werkt alleen goed als [aantal] niet geheel is.

Vandaar die kronkel met beide minnen.

Jan
John Kopmels
2004-12-03 20:41:13 UTC
Permalink
Post by jan
Leuk dat je mijn bijdrage óók goed noemt, maar helaas
denk ik dat die van jou niet helemaal doet wat gewenst is.
Post by jan
Int([aantal]) + 1 levert, als aantal 2 is, 3 op en niet de gewenste 2
Dit werkt alleen goed als [aantal] niet geheel is.
Vandaar die kronkel met beide minnen.
verrek dat getal kan ook nog een hele zijn ja, niet aan gedacht !

dus jou oplossing is een slimme winnaar, zonder minnen eindig je
met iets als IIf(Int([Aantal])=[Aantal];[Aantal];Int([Aantal])+1)

maar das dan weer erg langdradig tov jou antwoord

blijft de vraag of de negatieve er bij jou uitkomen zoals kees wil

-2,12 geeft bij jou (en hierboven) 2, dat is wiskundig goed
maar moet bij een creditnota of voorraad telling mogelijk 3 zijn

uitgaand zijn er immers 3 van voorraad afgetrokken dus nu -3 ?
maar om alles te omvatten moet je wel een functie'tje schrijven

we zijn het er in elk geval over eens dat je Int moet gebruiken,
en geen Cint of de wiskundige oplossing...

Groetjes -- John
jan
2004-12-03 21:18:23 UTC
Permalink
John,

Mee eens. Negatieve worden ook naar boven afgerond.
Als dat niet is wat Kees wenst dan zou het het volgende dat oplossen:

(2*([Aantal]>0)+1)*Int(-Abs([Aantal]))

CInt is inderdaad niet geschikt vanwege de beperkte range, maar werkt ook
anders dan Int.
CInt voert een afronding uit 2,7 wordt 3 en 2,3 wordt 2
Maar wat erger is: 2,5 wordt 2 en 3,5 wordt 4 (afronding naar dichtbij
gelegen even waarde).
Dus zelfde probleem wat je ook hebt met de functie Rouind.

Jan
John Kopmels
2004-12-03 19:09:09 UTC
Permalink
Probeer Int([aantal]+0,5)
graag goed lezen :-)

1) ik vraag niets maar geef antwoord op een vraag

2) je geeft 2 oplossingen die niet (altijd) werken

Cint([aantal]+0,5) werkt maar tot 32767 (+ of -)

Int([aantal]+0,5) werkt alleen als het drijvende deel < 0,5

groetjes -- John
John Kopmels
2004-12-03 19:45:08 UTC
Permalink
Post by John Kopmels
Int([aantal]+0,5) werkt alleen als het drijvende deel < 0,5
correctie : werkt niet als het drijvende deel < 0,5
Loading...