Avatar billede dp2001 Juniormester
28. januar 2001 - 11:08 Der er 10 kommentarer og
2 løsninger

Afrundinger

Hvordan tvinger man Access til altid at foretage afrundinger. I Excel kan man f.eks. bruge =AFRUND(værdi;2), hvis man ønsker 2 decimaler. Men jeg synes snart det er ligemeget, hvad jeg indstiller antal decimaler til i Access, så bliver den ved med at displaye flere decimaler (typisk ved beregninger).
Avatar billede kru Nybegynder
28. januar 2001 - 12:19 #1
Det gør man ved at bruge Format-egenskaben (Den står lige ovenover hvis du vælger egenskaber for din kontrol/teksboks) og angive enten et af standard formaterne (Der står i rullepanelet) eller ved at lave dit eget (Meget lig XL, hvis du har rodet med brugerdefinerede tal/tekstformater i celleformateringen).

Et typisk format for tal kunne være:
#.##0,00
, hvilket iøvrigt er standardformatet. Her betyder # at det er frivilligt om der skal stå et ciffer eller ej, mens 0 betyder der SKAL stå et ciffer uanset om det findes eller ej. Punktummet er tusindtalseparator, dvs. ovenstående format vil give følgende formattering:

12345,0009 bliver til 12.345,00
0,12345678 bliver til 0,12
12,3974535 bliver til 12,40
etc......

Der er to måder du kan bruge format på. Hvis du angiver et format i Format-egenskaben vil Access staig huske det \"rigtige\" uformatterede tal, men blot vise tallet som formatteret. Det betyder at når du går ind i feltet vil tallet skifte til den lange version (f.eks. 1234,43656456) og så snart du forlader feltet vil tallet blive formatteret igen (f.eks. til 1.234,44 - bemærk den afrunder selv). Det er denne metode du skal bruge hvis du skal udføre videre beregninger på tallet for at undgå afrundingsfejl.

Den anden metode er at angive et format i feltets Kontrolelementkilde (Faneblad 2 øverst). I ovenstående tilfælde ville du f.eks. skulle skrive:
=Format([datakilde];\"#.##0,00\")
Her vil kun det formatterede tal blive gemt. Alt andet vil gå tabt. Denne metode kan med fordel bruges hvis du gerne vil have formatteret tallet een gang for alle.

Bemærk det format du skriver i anførselstegnene ved brug af Format-funktionen, er identisk med den tekst du skriver under Format-egenskaben.

Hvis du vil se flere eksempler på formatteringskoder (#0@<> etc.) kan du vælge punktet \"Format, egenskab\" i Indeks under hjælpen for at få en komplet oversigt.

Håber det hjælper :o)
Avatar billede fdata Forsker
28. januar 2001 - 12:25 #2
Access er en båtnakke til matematik. Prøv f.eks. at afvikle:

Sub AccessFejl()
  Dim a, b As Single
  a = 1.19
  b = 1.1
  MsgBox (a - b)
End Sub

For korrekt afrunding må du selv lave arbejdet, f.eks. med:

Function Afrund(r As Single) As Double
  Afrund = (r * 100) + 0.5
  Afrund = (Int(Afrund) / 100)
End Function

Her afrundes til 2 decimaler. Hvis du vil afrunde til een, ganger og dividerer du med 10 i stedet osv.
Avatar billede dp2001 Juniormester
28. januar 2001 - 13:25 #3
kru...

det hjælper mig lidt på vej, men det jeg egengtlig gerne samtidig vil, er at nedrunde til nærmeste heltal....kan man indbygge en eller anden form for RUND.NED(værdi;0)?

Avatar billede fdata Forsker
28. januar 2001 - 16:15 #4
Hvis du vil VISE tallet nedrundet, så brug formatet Standard med 0 decimaler.

Hvis du vil NEDRUNDE tallet, så brug:

Function Nedrund(r As Single) As Double
  Nedrund= fix([r])
End Function

Avatar billede dp2001 Juniormester
28. januar 2001 - 16:55 #5
fdata...

det lyder jo meget godt, men hvor skal jeg angive det statement henne?

en anden ting...Standard med 0 decimaler gør vel ikke nødvendigvis, at tallet nedrundes?
Avatar billede kru Nybegynder
28. januar 2001 - 17:51 #6
fdata...
Det er fordi du erklærer dine variabler forkert. Når du skriver

Dim a, b As Single

erklærer du a som en Variant og b som en Single. Hvad du lige har demonstreret er at Access ikke kan finde ud af at regne på 2 forskellige variabeltyper og det er der ikke noget overraskende ved. Prøv istedet den korrekte:

Sub AccessFejl()
  Dim a As Single, b As Single
  a = 1.19
  b = 1.1
  MsgBox (a - b)
End Sub

dp2001...
Den traditionelle måde at afrunde på er ganske rigtigt som fdata skriver med heltalsoperatoren Int([talværdi]), der fjerner alt efter kommaet.

For at nedrunde tallet skriver du blot:

=Int([datakilde]*100)/100

, i feltets kontrolelementkilde. Så er tallet permanent nedrundet.

\"Formatteringsnedrunding\" uden at ændre tallets egentlig værdi kan du ikke umiddelbart.
Avatar billede dp2001 Juniormester
28. januar 2001 - 17:57 #7
kru...

det er altsammen meget fint. Men du bliver nødt til at fortælle mig, step for step, hvor jeg skal angive dette henne!?!? Er det en hændelsesprocedure eller hvad er vi ude i? Så sej er jeg altså heller ikke til Access.

hvis du lige kan afklare denne lille detalje, er nogle velfortjente point snart på vej.
Avatar billede dp2001 Juniormester
28. januar 2001 - 18:02 #8
sorry...var lige lidt for hurtig...prøver at kigge på det.
Avatar billede fdata Forsker
28. januar 2001 - 18:22 #9
>>kru
Jeg var lidt for hurtig på tataturet; men det forandrer ikke fakta. Har du kørt dit eget eksempel? Det giver 9,000003E-02 !?!

>>dp2001
Du opretter et modul, hvori du placerer koden (Sub\'erne) ovenfor. Herefter kan du referere til Afrund og Nedrund, som om de var indbyggede funktioner - det gælder både i forespørgsler, moduler og beregningsfelter.

For lige at fjerne enhver forvirring: Der er forskel på at VISE og BEREGNE tallet. Jeg angav begge metoder i mit svar.

Avatar billede dp2001 Juniormester
28. januar 2001 - 18:29 #10
Så lykkedes det sgu!

kru...jeg prøvede først din Int - men den kunne jeg ikke lige umiddelbart få til at virke.

i stedet virkede fdata\'s modul-halløjsa.

I får lov at dele pointene som tak for en STOR indsats.
Avatar billede kru Nybegynder
28. januar 2001 - 20:42 #11
>>fdata

Niks, det havde jeg ikke.. og du har kraftedeme ret! Mine uforbeholdne undskyldninger! Access regner rent faktisk som en brækket arm (Og så ikke et ondt ord om Pentium-processorer iøvrigt ;o)....)
Avatar billede fdata Forsker
29. januar 2001 - 19:40 #12
>>dp2001
Tillykke. Nu har du modellen. Så er det bare med at opfinde nye rutiner  :o)

>>kru
Jeg kan afslutningsvis fortælle, at en henvendelse til Microsoft om problemet kun medførte en sludder for en sladder om konvertering mellem decimal- og binære talsystemer og at det bestemt ikke var en fejl. \"Sådan er Access bare designet\", sagde man, \"det er ikke et regneark, men en database\". Det faktum at enhver lommeregner til 10 kr. kan løse opgaven, rørte ikke giganten.

Derfor er vi nu allesammen henvist til selv at afrunde vores resultater korrekt. Bemærk, at summen af en række beregnede beløb snildt kan hobe så mange regnefejl op, så det bliver til hele ører. Blot til almindelig advarsel!!!
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