Avatar billede hugopedersen Nybegynder
21. januar 2002 - 08:12 Der er 11 kommentarer og
1 løsning

Afrunding

Er der en eller anden der har kendskab til et modul der kan bruges til afrunding af tal / beløb ?
Jeg er ved at lave et lønsystem og der er jo nogle tal, som skal afrundes på bestemte måder. f.eks. altid ned og andre gange til nærmeste 10\'er
21. januar 2002 - 08:16 #1
Jeg har tidligere svaret på dette spørgsmål - se om du kan bruge det:
http://www.eksperten.dk/spm/111210
Avatar billede terry Ekspert
21. januar 2002 - 08:16 #2
altid ned og andre gange ..??
21. januar 2002 - 08:18 #3
Ellers er principptet typisk at man kan bruge denne formel til at afrunde. Her afrundes til nærmeste 10\'er, men dette tal kan bare udskiftes:
iif(Tal mod 10=0, Tal, int(Tal/10+1)*10)
Avatar billede hugopedersen Nybegynder
21. januar 2002 - 08:25 #4
Ja den var lidt kringlet Terry :-)
Nogle beløb rundes ned til nærmeste hele mens andre rundes ned til nærmeste 10\'er
F.eks. rundes AMBI bidrag ned til nærmeste hele mens trækgrundlaget rundes ned til nærmeste 10\'er.

Avatar billede hugopedersen Nybegynder
21. januar 2002 - 08:30 #5
thomasjepsen - din function kan \'kun\' runde op så den \'dur\' ikke helt til formålet.
21. januar 2002 - 08:37 #6
Hvad så med denne:
Public Function Afrund(Tal As Single, Nærmeste As Long, Optional RundOp As Boolean = True)
    Afrund = IIf(Tal Mod Nærmeste = 0, Tal, Int(Tal / Nærmeste + IIf(RundOp = True, 1, 0)) * Nærmeste)
End Function


Eks:
Afrund(43,10,false) angiver at 43 skal afundes til nærmeste 10\'er og der skal rundes ned (RundOp=False)
Avatar billede hugopedersen Nybegynder
21. januar 2002 - 09:03 #7
Nu runder den fint op eller ned til nærneste 10, MEN jeg vil jo gerne have mulighed for at runde til nærmeste hele også og det kan den ikke så vidt jeg kan teste mig frem til.
1286,86 skal blive til 1286,00 f.eks.
21. januar 2002 - 09:28 #8
hmm, det har du da ret i!? Nærmeste skal selvfølgelig sættes lig 1.

Det skulle være fixet her:

Public Function Afrund(Tal As Single, Nærmeste As Long, Optional RundOp As Boolean = True)
    If Nærmeste = 1 Then
        Afrund = Int(Tal + IIf(RundOp = True, 1, 0))
    Else
        Afrund = IIf(Tal Mod Nærmeste = 0, Tal, Int(Tal / Nærmeste + IIf(RundOp = True, 1, 0)) * Nærmeste)
    End If
End Function
21. januar 2002 - 09:32 #9
Og hvis den skal være lidt kortere og lidt mere brugervenlig:

Public Function Afrund(Tal As Single, Optional Nærmeste As Long = 1, Optional RundOp As Boolean = True)
    If Nærmeste = 1 Then
        Afrund = Int(Tal + IIf(RundOp = True, 1, 0))
    Else
        Afrund = Int(Tal / Nærmeste + IIf(RundOp = True, 1, 0)) * Nærmeste
    End If
End Function

Derved kan den bruges i en kort version således:
Afrund(3423.645)
Eller
Afrund(324.54, ,false)
Avatar billede hugopedersen Nybegynder
21. januar 2002 - 09:42 #10
Jeg kan kun sige tak.
21. januar 2002 - 09:43 #11
my pleasure :o)
Avatar billede hugopedersen Nybegynder
28. januar 2002 - 07:11 #12
Thomas - jeg har fundet en lille detalje !
Hvis man sender et 'helt' tal til funktionen f.eks. 11, og vil afrunde til nærmeste hele, så får man 12 tilbage.
Jeg opdagede 'fejlen' her i weekenden da jeg var ved at køre test på mit lønsystem og fik nogle uforståelige tal.
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