Avatar billede bens Nybegynder
14. september 2004 - 10:58 Der 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.
14. september 2004 - 11:02 #1
Læg denne funktion i et modul:

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)
14. september 2004 - 11:03 #2
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
Avatar billede bens Nybegynder
14. september 2004 - 11:05 #3
nu er jeg ikke lige helt skrap til access.. hvordan ligger man den i et modul??
14. september 2004 - 11:09 #4
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.
Avatar billede bens Nybegynder
14. september 2004 - 11:15 #5
hvor skal jeg så sætte den ind i min kode??
14. september 2004 - 11:17 #6
spørgsmål ikke forstået :o)

Har du fået lagt funktionen ind i et modul?
Avatar billede bens Nybegynder
14. september 2004 - 11:18 #7
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;
14. september 2004 - 11:22 #8
Ah, sorry:

Prøv med denne:

SELECT Land, Hovedstad, km2, Indbyggere, Afrundtal([Indbyggere/km2];0,01) AS test
FROM lande
ORDER BY Afrundtal([Indbyggere/km2];0,01);
Avatar billede bens Nybegynder
14. september 2004 - 11:26 #9
hmm virker ikke rigtig
Avatar billede bens Nybegynder
14. september 2004 - 11:28 #10
den siger syntax error i linien Afrundtal([Indbyggere/km2];0,01)??
når man så trykker ok så blinker den ved ;
14. september 2004 - 11:28 #11
Nej, der skal byttes om på komma, semikolon og punktum (Det er Access som ikke er så konsekvent med hvornår man bruger det ene og det andet)

Denne skulle værre der:

SELECT Land, Hovedstad, km2, Indbyggere, Afrundtal([Indbyggere/km2],0.01) AS test
FROM lande
ORDER BY Afrundtal([Indbyggere/km2],0.01);
Avatar billede bens Nybegynder
14. september 2004 - 11:33 #12
det virker overhovedet ikke.

ambiguous name. in query expression 'Afrundetal([indbyggere/km2], 0.01)'.
14. september 2004 - 11:36 #13
Nå, Access har selv sat kantede parenteser forkert:

SELECT Land, Hovedstad, km2, Indbyggere, Afrundtal([Indbyggere]/[km2],0.01) AS test
FROM lande
ORDER BY Afrundtal([Indbyggere]/[km2],0.01);
Avatar billede bens Nybegynder
14. september 2004 - 11:38 #14
det afrunder ikke
14. september 2004 - 11:50 #15
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.
Avatar billede bens Nybegynder
14. september 2004 - 12:17 #16
det virker tak skal du have
Avatar billede bens Nybegynder
14. september 2004 - 12:22 #17
hmm kiggede lige lidt nærmere på resultatet
nu regner den ikke alle sammen ud og den sortere dem heller ikke rigtigt.
14. september 2004 - 12:28 #18
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?

Vil det være ok?
Avatar billede bens Nybegynder
14. september 2004 - 12:30 #19
jo det ville være fint nok.
14. september 2004 - 12:35 #20
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.
Avatar billede bens Nybegynder
14. september 2004 - 12:41 #21
cool tak for hjælpen, nu sortere den også rigtigt
Avatar billede bens Nybegynder
14. september 2004 - 12:41 #22
kunne man jo sådan set også bare have gjort før.. hehe.. men tak for hjælpen
14. september 2004 - 12:43 #23
hehe, ja, men den løsning var for oplagt. Jeg gik ud fra, at denne løsning var udelukket ;o)
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