14. september 2004 - 10:58Der er
22 kommentarer og 1 løsning
afrunding til 2 decimaler
hey jeg har denne kode SELECT Land, Hovedstad, km2, Indbyggere, Indbyggere/km2 AS test FROM lande ORDER BY indbyggere/km2 DESC;
den finder så hvor mange indbyggere der er pr km2, men hvordan afrunder jeg det til 2 decimaler?? for jeg synes det er irriterende at der står 10 tal efter kommaet. ikke noget at bruge det til jo.
Public Function Afrundtal(Tal As Single, Optional Nærmeste As Single = 1, Optional RundOp As Boolean = False) as sigle If Nærmeste = 1 Then Afrundtal = Int(Tal + IIf(RundOp = True, 1, 0.5)) Else Afrundtal = Int(Tal / Nærmeste + IIf(RundOp = True, 1, 0.5)) * Nærmeste End If End Function
Brug derefter funktionen således: Afrundtal([dit felt],0.01)
Hov, der var lige en tastefejl. Funktionen skal se således ud:Public Function Afrundtal(Tal As Single, Optional Nærmeste As Single = 1, Optional RundOp As Boolean = False) As Single If Nærmeste = 1 Then Afrundtal = Int(Tal + IIf(RundOp = True, 1, 0.5)) Else Afrundtal = Int(Tal / Nærmeste + IIf(RundOp = True, 1, 0.5)) * Nærmeste End If End Function
Du går til moduler i databasevinduet (sidste faneblad) Klikker på knappen [Ny] Indsæt koden under de 2 øverste linier. Luk kode-vinduet. På et tidspunkt bliver du bedt om at give modulet et navn. dette navn har ingen betydning, men må bare ikke hedde Afrundtal.
Herefter kan du bruge funktionen i en forespørgel eller direkte på en formular m.m.
ja har lagt det ind i en modul. men så dette her Afrundtal([dit felt],0.01)?? hvor skal det så ind henne i min egen kode SELECT Land, Hovedstad, km2, Indbyggere, Indbyggere/km2 AS test FROM lande ORDER BY indbyggere/km2 DESC;
hmm, jeg har lige afprøvet den i en forespørgsel, og du har ret: den afrunder ikke korrekt. Det underlige er, at jeg har brugt den i årevis - men kun fra VBA-kode, hvor den fungere upåklageligt :o(
Jeg tror, at problemet er, at Access ofte har problemer med decimalerne. Du kan oplevet at 2+2 = 4,000000123233.
Men ikke desto mindre, så har jeg omskrevet funktionen til dit behov (så må jeg senere se at få den lavet mere generel):
Public Function Afrundtal(Tal As Single, Optional Nærmeste As Single = 1, Optional RundOp As Boolean = False) As String Dim tmp As Single Dim pos As Integer If Nærmeste = 1 Then tmp = Int(Tal + IIf(RundOp = True, 1, 0.5)) Else tmp = Int(Tal / Nærmeste + IIf(RundOp = True, 1, 0.5)) * Nærmeste pos = InStr(1, CStr(tmp), ",") If pos > 0 Then Afrundtal = Left(tmp, pos + 2) End If End If
End Function
Det virker hos mig. Lad mig vide, om du får nogle fejl.
Jeg har siddet og leget lidt mere med den. Det er p....-irriterende at Access ikke kan håndtere decimaler ordentligt.
Når jeg debugger mig gennem koden med de indbyggede værktøjer, kan jeg se, at når en værdi forlader min funktion, så er den f.eks. 233.43, men når den vises i forespørgslen viser den 233.4322323653
Hvornår og hvorfor den selv finder på de sidste decimaler ved jeg ikke :o(
Prøv evt at sætte dette ind i en ny kolonne i din forespørgsel:
Udtryk2: CSng("4234,1")
Den skulle blot vise tallet 4234,1 i alle poster. Men ved at konveretere den til reelt tal (hvilket det jo skal være) bliver resultatet 4234,10009765625!
Problemet med min work-around er, at den viser tallet som tekst, hvorved sorteringen bliver forkert :o(
sig mig: hvad siger du til, at den altid bare viser 2 decimaler? Dvs 444,1 vises som 444,10?
ah, jamen så behøver vi slet ikke alt det her VBA :o)
Så laver du bare forespørgslen som du oprindeligt have den. Derefter åbner du egenskaberne for forespørslen (når du er i designvisning) ved at vælge menuen Vis->Egenskaber. Derefter klikker du på din test-kolonne. I egenskaberne sætter du: Format= Standard Antal decimaler= 2
nemt, ikke?
Hvis du skal bruge forespørgselen til f.eks. en rapport eller formular, skal du nok sætte samme egenskaber på den tekstboks, som viser resultatet.
hehe, ja, men den løsning var for oplagt. Jeg gik ud fra, at denne løsning var udelukket ;o)
Synes godt om
Ny brugerNybegynder
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.