Avatar billede andreas1706 Nybegynder
17. december 2001 - 11:30 Der er 39 kommentarer og
3 løsninger

Afrunding af værdier

Er der nogen, der kan fortælle hvordan man i en accesforespørgsel afrunder en beregnet værdi op!!! til nærmeste heltal?
Avatar billede proaccess Nybegynder
17. december 2001 - 11:34 #1
=int(etTal + 1)
Avatar billede terry Ekspert
17. december 2001 - 11:35 #2
? int(1+1)
Avatar billede juggalo Nybegynder
17. december 2001 - 11:35 #3
mener det er (i den danske Access);

AFRUND(tal;antal decimaler)
Avatar billede proaccess Nybegynder
17. december 2001 - 11:40 #4
Du skal IKKE lægge 1 til dit tal, for så vil 5,000 blive til 6,000...

Derimod skal du lægge ,9999999 til tallet og tage heltalsværdien.

=Int(etTal + ,999999)
Avatar billede terry Ekspert
17. december 2001 - 11:43 #5
SELECT CLng([OldVal]+0.5) AS NewVal
FROM YourTable;

not shure if this is 100% OK (havent tried it with all values)
Avatar billede terry Ekspert
17. december 2001 - 11:45 #6
Int is only up to 32767!
Avatar billede b_hansen Novice
17. december 2001 - 11:54 #7
I Excel findes funktionen =RUND.OP(tal,antal decimaler). Jeg ved ikke, om denne funktion findes i Access
Avatar billede andreas1706 Nybegynder
17. december 2001 - 12:04 #8
Jeg har brug for en funktion, der runder en beregnet værdi fra en forespørgsel op til nærmeste heltal.
Avatar billede proaccess Nybegynder
17. december 2001 - 12:14 #9
Og det er det vi har givet dig... ;-)

=CLng(etTal+0,5)
Avatar billede jesperthomsen Nybegynder
17. december 2001 - 12:26 #10
Der er flere muligheder, men de fleste fungerer som afrunding, herunder clng og cint. Hvis du vil have heltalsdelen (altså, 8.9 = 8) skal du i stedet bruge fix. Den er i øvrigt også ganske handy til date/time-værdier, når du kun vil have datoen.
Du kan altså bruge fix(værdi) + 1.
Hvis din oprindelige værdi i forvejen er \'helt\' vil det naturligvis give en forkert afrunding. Det vil du ikke kunne komme uden om ved at ligge 0.5 eller 0.9999999 eller andet snedigt til. Så ville jeg i stedet bruge iif:
iif(værdi = fix(værdi);værdi;fix(værdi)+1)
Den burde være helt sikker.
Avatar billede jesperthomsen Nybegynder
17. december 2001 - 12:29 #11
Terry og proaccess: Den er ikke helt sikker. Altså, med mindre eksempelvis 1.00000000000 skal gøres til 2, og det lyder ikke sandsynligt.
Avatar billede terry Ekspert
17. december 2001 - 13:12 #12
Hi jesperthomsen! Well I mentioned in my answer
\"not shure if this is 100% OK (havent tried it with all values)\"!
Your fix seems to work fine :o)


Avatar billede jesperthomsen Nybegynder
17. december 2001 - 13:17 #13
Terry: I know...ville bare lige blære mig lidt med mit matematiske overblik. I øvrigt ville din løsning fungere fuldt ud ligeså godt, hvis man pakkede den ind i samme iif :-).
17. december 2001 - 14:31 #14
ProAccess\'s sidste svar (=CLng(etTal+0,5)) er det mest korrekte og den man altid brugte før i tiden, da man ikke havde round (som jo forøvrigt er en ganske fin funktion til afrunding.

I en forespørgsel kan man således skrive i en kolonne:
Afrundettal: Round(Beregnettal)

Vær dog opmærsom på at round har det sjovt med 2.5, 4.5, 6.5 osv.

Grundet dette fænomen, så er CLng(beregnettal+0,5) det mest optimale.

/Thomas

PS: Proaccess-> det ligner dig ikke at slynge 2 forkerte svar afsted, før du rammer det rigtige. Det plejer at være sådan noget, jeg laver ;o)
Avatar billede terry Ekspert
17. december 2001 - 14:35 #15
Hi Thomas, nice to see your still around :o)

Avatar billede proaccess Nybegynder
17. december 2001 - 14:38 #16
>Thomas: Jeg har åbenbart fået FOR travlt... Man bliver jo stresset i denne jule-tid...

BTW: Jeg legede også med \\-operatoren, men den rundede også både op og ned ved ,5-værdier (vilkårligt, så op ved nogle rækker og ned ved andre)
Avatar billede proaccess Nybegynder
17. december 2001 - 14:38 #17
Desuden var det altså Terry, som først lagde 0,5 til...  ;-)

Avatar billede proaccess Nybegynder
17. december 2001 - 14:40 #18
>Thomas: Er Round() med i Acc97 - eller er det en 2K-feature ?
17. december 2001 - 14:48 #19
Hi terry,

I am always there...lurking in the dark...seeking the right moment to strike down upon those who would attempt to poison and destroy my brothers with great vengeance and furious anger. And they will know my name is the Lord when I lay my vengeance upon them.

(allright, I got carried away a little...)

Proaccess, du har ret! Det var Terry (læste det lidt hurtigt gennem)

Men hvem snakker om Access 97? Har jeg overset noget?
Det er rigtigt at Round først blev introduceret i Access 2K.
Andreas, hvilken version benytter du?
Avatar billede proaccess Nybegynder
17. december 2001 - 14:53 #20
JEG snakker om \'97...

Jeg (måske af den lidt for konservative type) kan godt lide at lave gennerel kode, som kan bruges på selv MEGET gamle installationer...
Dette overflødiggøres til dels af Microsoft, som selv kommer ind på fejl og mangler i deres tidligere udgaver ved opdatéringer... men alligevel...

Dette gør så til gengæld at man ikke får de store problemer ved konvertéring fra Access (eller VB for den sags skyld)... som hvis man brugte FOR mange af de \"nye\" indbyggede funktioner...

det var da vist en del ...\'er jeg fik fyret af i denne omgang. Jeg må vist til at slappe lidt af.
Avatar billede terry Ekspert
17. december 2001 - 15:01 #21
I thought it was always me who came with the jokes Thomas :o)
18. december 2001 - 09:10 #22
Proaccess-> Ideen/holdningen er god nok og jeg har da også selv haft den holdning tidligere. Men hvis man fører tanken videre, så skulle vi jo alle sidde og programmere i maskinkode. ;o)
Bruger du så heller ikke faneblade på dine formularer og har du helt droppet ADO og holder dig udelukkende til DAO (eller RDO)?
Noget andet er Proaccess, hvad er \\-operatoren??? Gør den det samme?
Grunden til at Round (og måske \\) runder forkert af ved 0.5, 2.5, 4.5, 6.5 osv er at det er sådan bankerne afrunder i deres transaktioner (for some reason?). Og det har Microsoft (og de fleste andre softwarehuse) valgt som standard.

Terry-> Who is joking? ;o)
Avatar billede proaccess Nybegynder
18. december 2001 - 09:16 #23
>thomas: Nu skal man jo heller ikke overdrive... ;-)  - Jeg mener bare det er FOR tidligt at afskrive Off97...

\\ er heltals-division...  MOD er resten

5/3 = 1,666666667
5\\3 = 1
5 MOD 3 = 0,666666667
18. december 2001 - 09:21 #24
hehe, jeg mener nu heller ikke selv at man skal afskrive Acc97. Men hvis databasen afvikles i Acc2000 så mener jeg at man skal benytte alle de (fordelagtige) nye funktionaliteter, som måtte være (med parentesen antyder jeg at ikke alle nye tiltag altid er at foretrække. Der er stadig mange situationer hvor jeg vil foretrække DAO frem for ADO...men det er en anden og gammel diskussion, hvor vi vist nok er enige ;o)

MOD kender jeg (og / har jeg også hørt om ;o) men \\ kendte jeg ikke!
Så kan jeg godt holde fir resten af dagen. Nu har jeg lært dagens nye feature!
Avatar billede proaccess Nybegynder
18. december 2001 - 09:29 #25
Det er for pokker da en GAMMEL feature...  *LOL*

18. december 2001 - 09:31 #26
så så..hvad ved jeg? Jeg har også først lige hørt om noget der hedder mesbox eller msgbox eller lign. Har du hørt om den? ;o)
Avatar billede proaccess Nybegynder
18. december 2001 - 09:43 #27
Er det ikke noget man bruger til at validére sine variable gennem et kodeforløb med...

Dim a As Long
For a = 1 To 99999999
  MsgBox \"Variablen a er nu lig med \" & a
Next
18. december 2001 - 09:45 #28
hmm, prøver lige din kode af....øjeblik

...Tror lige at jeg sætter en docmd.echo false foran inden jeg kører den....
18. december 2001 - 11:18 #29
Den er nu nået til \"Variablen a er nu lig med 2500\"!

Hvorlænge bliver den ved, Proaccess? Jeg er ved at blive lidt utålmodig ;o)
Avatar billede b_hansen Novice
18. december 2001 - 11:43 #30
tjahhh.... 2500 af 99999999 er lig med 1/40000, så jeg vil gætte på, at den fortsætter lidt endnu ;-)

18. december 2001 - 11:55 #31
Damn....jeg håber, at jeg når det inden jul!
18. december 2001 - 11:56 #32
ProAccess-> Det er sidste gang, jeg afprøver et af dine forslag! ;o)
Avatar billede b_hansen Novice
18. december 2001 - 11:57 #33
*LOOOL*
Avatar billede proaccess Nybegynder
18. december 2001 - 12:09 #34
HO-HO !!! - Som julemanden ville sige det...

Kender du den med [ctrl]+[break] ???
Eller er den også for gammel...
18. december 2001 - 12:17 #35
Ctrl+Break virker ikke, da jeg så ikke kan klikke på noget. Det skyldes sikker min Docmd.Echo False :o(
Jeg kan kun trykke F5 for at fortsætte.

Men det skal du ikke tænke på Poul Erik. Jeg klikker bare færdigt....
Avatar billede proaccess Nybegynder
18. december 2001 - 12:20 #36
Hva\' så med \"[ctrl]+[alt]+[delete]\" ;æ)
18. december 2001 - 12:38 #37
Efter at jeg trykkede \"[ctrl]+[alt]+[delete]\" 2 gange i træk, hjalp det (maskinen genstartede). Men nu fik jeg slettede det sidste 9 timers arbejde - tak for det! You are a real pal ;o)
Avatar billede terry Ekspert
18. december 2001 - 12:40 #38
Thats what friends are for Thomas :o)
Avatar billede jesperthomsen Nybegynder
18. december 2001 - 12:45 #39
Var der ikke på et tidspunkt en eller anden der skrev noget om en afrunding?
Avatar billede terry Ekspert
18. december 2001 - 12:52 #40
wrong category, this is free debat (isnt it?)
Avatar billede terry Ekspert
18. december 2001 - 12:53 #41
Just joking :o)
Avatar billede proaccess Nybegynder
18. december 2001 - 12:56 #42
>jesperthomsen: afrunding ???

>thomasjepsen: sidste 9 timers arbejde...? Du har vist ikke nået at lave ret meget efter 2500 klik på venstre musetast...
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Dyk ned i databasernes verden på et af vores praksisnære Access-kurser

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester