Gå til innhold

Skoleprosjekt, program som beregner inntekter


Anbefalte innlegg

Videoannonse
Annonse
Skrevet
Round(Number, NumDigitsAfterDecimal)

 

Forresten så er det lurt å bruke Currency når det er snakk om cash (currency er 64 bit, altså kan det inneholde et statsbudsjett eller fjorten)

Av en eller annen syk grunn som jeg ikke forstår så fungerer Round funksjonen helt merkelig.

 

F.eks så gir round(2.565,2) verdien 2.56 , mens det burde vært 2.57. Round(2.555,2) gir korrekt 2.55. Round(2.545,2) gir 2.54 som er feil... osv... osv...

 

Jeg har faktisk vært nødt til å lage (eller rettere sagt, fant den på nettet) en egen avrundingsfunksjon for å få korrekte resultater.

 

Her er den hvis noen ønsker den:

 

Public Function Round( _
ByVal Number As Variant, Optional NumDigits As Long = 0, _
Optional UseBankersRounding As Boolean = False) As Double
'
' ---------------------------------------------------
' From "Visual Basic Language Developer's Handbook"
' by Ken Getz and Mike Gilbert
' Copyright 2000; Sybex, Inc. All rights reserved.
' ---------------------------------------------------
'
 Dim dblPower As Double
 Dim varTemp As Variant
 Dim intSgn As Integer

 If Not IsNumeric(Number) Then
   ' Raise an error indicating that
   ' you've supplied an invalid parameter.
   Err.Raise 5
 End If
 dblPower = 10 ^ NumDigits
 ' Is this a negative number, or not?
 ' intSgn will contain -1, 0, or 1.
 intSgn = Sgn(Number)
 Number = Abs(Number)

 ' Do the major calculation.
 varTemp = CDec(Number) * dblPower + 0.5
 
 ' Now round to nearest even, if necessary.
 If UseBankersRounding Then
   If Int(varTemp) = varTemp Then
     ' You could also use:
     ' varTemp = varTemp + (varTemp Mod 2 = 1)
     ' instead of the next If ...Then statement,
     ' but I hate counting on TRue == -1 in code.
     If varTemp Mod 2 = 1 Then
       varTemp = varTemp - 1
     End If
   End If
 End If
 ' Finish the calculation.
 Round = intSgn * Int(varTemp) / dblPower
End Function

Skrevet
Men du kaffenils .. Er det ikke slik at 5 rundes av til 0, mens 5.00001 rundes opp til 10 ?

Det korrekte er at 2.5 rundes opp til 3, mens 2.49999999999 rundes ned til 2.

 

Round funskjonen i VB gjør rett i "annenhver" avrunding. :thumbdown:

Skrevet
Det korrekte er at 2.5 rundes opp til 3, mens 2.49999999999 rundes ned til 2.

 

Round funskjonen i VB gjør rett i "annenhver" avrunding. :thumbdown:

Hva mener du med "gjør rett"?

 

Eksempelet ditt er jo korrekt.

Skrevet
Den interne funksjonen CInt konverterer til datatypen Integer, mens Val returnerer Double. Begge disse datatypene holder tall, og med mindre du helt klart ikke ønsker høyre tall enn 32768 eller mindre enn -32768, er ikke dette nødvendig. Integer kan, som navnet tilsier, ikke holde annet en heltall.

Må bare pirke litt :whistle:

En integer går faktisk bare opp til 32767,

mens den går helt ned til -32768. :)

Skrevet
Den interne funksjonen CInt konverterer til datatypen Integer, mens Val returnerer Double. Begge disse datatypene holder tall, og med mindre du helt klart ikke ønsker høyre tall enn 32768 eller mindre enn -32768, er ikke dette nødvendig. Integer kan, som navnet tilsier, ikke holde annet en heltall.

Må bare pirke litt :whistle:

En integer går faktisk bare opp til 32767,

mens den går helt ned til -32768. :)

Er det 16 bits integers i vb nå også? Ikke rart jeg ikke liker det...

Skrevet
Det korrekte er at 2.5 rundes opp til 3, mens 2.49999999999 rundes ned til 2.

 

Round funskjonen i VB gjør rett i "annenhver" avrunding.  :thumbdown:

Hva mener du med "gjør rett"?

 

Eksempelet ditt er jo korrekt.

Les det første innlegget mitt, eller prøv dette i Immediate Window:

 

? round(2.5)

2

 

? round(3.5)

4

 

 

Ser du ikke feilen?

Skrevet (endret)

Nå kommer sansynligvis mine siste problemer...:

 

1. Jeg skal beregne Lån, annuitets og Serielån... Annuitetslån er pmt... så det er ikke noe problem. Men For Serielån kan jeg ikke noen kommando! Finnes det noen innebygde?

 

2. Problem... Jeg vil gjerne ha en startoppscreen... Den skal være en egen form. Og skal vises i tre sek før det kommer over til den vanlige formen...

 

Hilsen Peter!

Endret av Blackslash
Skrevet (endret)

Jeg vet ikke hvordan du har lyst til å beregne et lån, men dette er jo nesten ikke vb. Bare matte!

 

dim lån, rente 'rente er 20%
lån = 200000
rente = (lån / 100) * 20
msgbox rente

 

Skal du ha load screen kan du bruke en vanlig "Timer" satt på 3000 interval.

Form2.show
unload me

Endret av Jonas
Skrevet

Hei! Nå skal jeg snart levere tilbake prosjektet... Dere kan se resultatet når det er ferdig!

 

Jeg bruker form1.print eller noe slikt noe... Men dersom jeg ikke har koblet til skriver kommer feilmelding hvor de står prineter error... Hvor dan kan man fikse denne feilen?

Skrevet

Jeg trykka på Print-knappen og fikk feilmedling, men utskriften kom.

 

Så bør du rydde litt. F eks alle trinnene under hverandre, og resultatet ved siden av.

Skrevet

Slik som programmet er designet nå, kunne du fått alt mer oversiktlig ved å sette de forksjellige trinnene i hvert sin form. Dette er også løsningen mangen andre programmer bruker, og viser seg å være den mest brukervennlige. Eneste ulempen er en litt mer tidskrevene prosess for de mer erfarne.

 

Jeg opplevde også endel problemer med programmet; det klikket, og flere ting fungerte ikke helt skikkelig. Jeg vil anbefale deg å se over koden igjen, eventuelt legge den ut her.

Skrevet (endret)

Oki... fikk utsetetlse og jeg har bare tenkt til å rette en ting til, feilen når man skriver ut.... Her er koden:

 

Når formen loader:

 

DIm baha

 

On error goto baha

form.printform

baha:

svar = msgbox("*Meldingen)

Unload me

End sub

 

Alt står i riktig rekkefølge... men det er nok en del ting som ikke er riktig fordi jeg ikke har det foran meg akkurat nå...

 

Hva er det jeg må gjøre om?'

 

Dersom dere må ha den eksakte koden må dere bare si ifra!

Endret av Blackslash
Skrevet

Men du sa jo at det kom en feil melding når jeg skrev den ut... Selv om det gikki greit... Så koden for hele utskrifts-dingebomsen er:

 

Dim baha

Dim svar

Private Sub form1_load()

 

On error GoTo baha

 

form1.print form

 

baha: svar = msgbox(Meldinge)

 

End sub

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
  • Hvem er aktive   0 medlemmer

    • Ingen innloggede medlemmer aktive
×
×
  • Opprett ny...