Avatar billede peterlang Nybegynder
23. maj 2004 - 20:02 Der er 12 kommentarer og
1 løsning

Penge rund op og ned

Hej

Jeg skal bruge en funktion til at runde et beløb op & ned, til et kassesystem.

Dim Total As Currency
Total=RundOpNed("49,45")

49,45 = 49,50
49,95 = 50,00
49,33 = 49,25

Peter Lang
Avatar billede terry Ekspert
23. maj 2004 - 20:09 #1
Round(YourValueGoesHere)
Avatar billede terry Ekspert
23. maj 2004 - 20:09 #2
Not sure if it rounds down, I have a feeling that it doesnt!
Avatar billede peterlang Nybegynder
23. maj 2004 - 20:12 #3
Round(YourValueGoesHere)

virker ikke, den runder ned til nærmeste heltal.

Peter Lang
Avatar billede _cyberdude_ Nybegynder
23. maj 2004 - 20:28 #4
så skal du til at lave din egen funktion som runder... Noget der ligner det her:

Function RundOpNed(heltal as long, kommatal as integer) as string '(eller single,_ tror jeg nok det er, men den retunere tallet med . i mellemi stedet for , og så skal der lige rettes lidt)

if kommatal < 13 then
kommatal = 0
elseif kommatal >= 13 and kommatal < 38 then
kommatal = 25
elseif kommatal >= 38 and kommatal < 63 then
kommatal = 50
elseif kommatal >= 63 and kommatal < 88 then
kommatal = 75
elseif kommatal > 88 then
kommatal = 100 
end if


RundOpNed = ((heltal * 100) + kommatal)/100

end function


noget der ligner den stil.. ret den lige selv til.. har ikke testet den...
23. maj 2004 - 21:37 #5
Public Function Afrundtal(Tal As Single, Optional Nærmeste As Single = 1, Optional RundOp As Boolean = True)
    If Nærmeste = 1 Then
        Afrundtal = Int(Tal + IIf(RundOp = True, 1, 0))
    Else
        Afrundtal = Int(Tal / Nærmeste + IIf(RundOp = True, 1, 0)) * Nærmeste
    End If
End Function

Eks:
afrundtal(Tal,0.25)
Avatar billede peterlang Nybegynder
24. maj 2004 - 09:54 #6
Hej

Thomasjepsen's forslag kan ikke bruges for den runder enten kun op eller ned

Cyberdude's forslag virker fint, men jeg har lavet den lidt om.



Function RundOpNed(belob As Currency) As String

Dim heltal As Currency
Dim ore As Currency

heltal = Round(belob)
ore = belob - heltal

If ore > 0 Then
    If ore < 0.13 Then
    ore = 0
    ElseIf ore >= 0.13 And ore < 0.38 Then
    ore = 0.25
    ElseIf ore >= 0.38 And ore < 0.63 Then
    ore = 0.5
    ElseIf ore >= 0.63 And ore < 0.88 Then
    ore = 0.75
    ElseIf ore > 0.88 Then
    ore = 1
    End If
End If

RundOpNed = heltal + ore

End Function



Tak for hjælpen

Cyberdude hvis du vil have nogle poient skal du komme med et svar, eller får de andre så jeg kan lukke.


Peter Lang
24. maj 2004 - 10:19 #7
Hej Peter,

Det var godt, at du opdagede det :o)

Jeg har nu korrigeret funktionen:

Public Function Afrundtal(Tal As Single, Optional Nærmeste As Single = 1, Optional RundOp As Boolean = False)
    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

Den skulle virker. Du er selvfølgelig velkommen til stadig at bruge cyberdude's. Men er bare lidt kortere...
Avatar billede martin_moth Mester
24. maj 2004 - 11:42 #8
peterlang/cyberdude:

Overvej en select case i stedet for 117 if'ere.

Select case ore
  case < 0 Then
    ore = 0
  case >= 0.13 And < 0.38
    ore = 0.25
  case >= 0.38 And < 0.63
    ore = 0.5
  case >= 0.63 And < 0.88
    ore = 0.75
  case else
    ore = 1
Ens Select

Smag og behag :=)
Avatar billede peterlang Nybegynder
24. maj 2004 - 15:13 #9
hey,

Ja, så virker thomasjepsen funktion også.

Så nu der er to brug-bare løsninger, så jeg lukker nu.

Endnu engang tak for hjælpen.
24. maj 2004 - 15:15 #10
Selv tak :o)
Avatar billede _cyberdude_ Nybegynder
24. maj 2004 - 21:58 #11
hmm.. gik glip af nogle points... :D.. bare glem det..
Martin_Moth: ville jeg også mene men jeg var lidt i tvivl om at And ville virke i Case, jeg kunne jo bare havde startet VB men jeg mente bare ikke man kunne bruge dem sammen... men min smag er der ellers helt klart case....

hmm... peters ser lidt bedre ud... :D.. jeg var bare lige for doven(:D) til at sidde og lige chekke sådan en funktion.. valgte bare lige at skrive den "nemme" metode...
Avatar billede leskil Nybegynder
25. maj 2004 - 20:42 #12
Vb har en funktion til dette:
MitTal = Format(TalletDerSkalAfrundes, "#,##0.00")
Du skal bare været opmærksom på at Format() kun kan arbejde med strenge, så man skal lige konvertere det først.
Avatar billede leskil Nybegynder
25. maj 2004 - 20:43 #13
Det var vist ikke det rigtige sted :( Min fejl!
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
Kurser inden for grundlæggende programmering

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