Probleme mit der Übergabe einer Zahl

  • VB6

Es gibt 15 Antworten in diesem Thema. Der letzte Beitrag () ist von BiedermannS.

    Probleme mit der Übergabe einer Zahl

    Hey,

    ich verstehe nicht, warum intLaufzeit nicht den Wert übernimmt ???

    Eigentlich sollte da 10 stehen. Aber er zeigt mir immer eine Null an !!! Egal was ich mache... Habe schon die Datentypen versucht zu ändern, dann habe ich die Formel anders versucht... IMMER 0.


    Kann mir einer von euch sagen, wieso da immer 0 raus kommt ?

    Visual Basic-Quellcode

    1. Option Explicit
    2. Private Sub cmdFeldLoeschen_Click()
    3. txtErgebnisLaufzeit.Text = ""
    4. txtAnfangskapital.Text = "5000"
    5. txtEndkapital.Text = "8540,72"
    6. txtZinssatz.Text = "5,5"
    7. End Sub
    8. Private Sub cmdStart_Click()
    9. Dim intJahre As Integer
    10. Dim intLaufzeit As Integer
    11. Dim sngZinssatz As Single
    12. Dim curEndkapital As Currency
    13. Dim curAnfangskapital As Currency
    14. sngZinssatz = CSng(txtZinssatz.Text)
    15. curEndkapital = CCur(txtEndkapital.Text)
    16. curAnfangskapital = CCur(txtAnfangskapital.Text)
    17. intLaufzeit = Log(curEndkapital / curAnfangskapital) / Log(1 + sngZinssatz * 100)
    18. txtErgebnisLaufzeit.Text = intJahre
    19. End Sub
    @Dennis336: Wollten wir nicht mit numerischen Zahlen rechnen und die String-Controls nur zur Ausgabe benutzen?
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    wenn du das hier Rechnest : log(8540,72 / 5000) / log(1 + 5,5 * 100)
    erhalte ich das von mir oben genannte ergebnis. sollte es wirklich 9,9 sein, dann ist Windows schuld :P

    Edit: Selbst mein Handy spuckt das aus, wie rechnest du dass denn bitte? oder mit welchen werten?

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „EaranMaleasi“ ()

    Dennis336 schrieb:

    das hat mir mein Ausbilder so gezeigt
    Sorry, dann hast Du schlechte Karten.
    Kannst Du mit dem Menschen reden? Ihn z.B. freundlich auf Innovationen in den Programmiersprachen hinweisen, .NET und so.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Wie bereits gesagt wurde, liegt es daran dass die falsche Variable verwendet wurde. Aber der Programmaufbau wird dadurch auch nicht besser.

    Hier mal mein Vorschlag. Selbes Programm, anderer Aufbau:

    Visual Basic-Quellcode

    1. Option Explicit
    2. 'Hier werden deine Werte gespeichert
    3. private ErgebnisLaufzeit as Double
    4. private Anfangskapital as Currency
    5. private EndKapital as Currency
    6. private Zinssatz as Double
    7. 'Gibt die Berechneten Werte aus.
    8. Private Sub WerteAnzeigen(Optional ByVal RundenAuf as Integer = 2)
    9. 'Wenn der "User" das Ergebnis nicht wegkopieren soll/braucht, kannst du aus txtErgebnis ein Label machen, das nur Informativ ist
    10. txtErgebnisLaufzeit.Text = CStr(Math.Round(ErgebnisLaufzeit, RundenAuf))
    11. End Sub
    12. 'Hier werden die Eingabewerte geholt, geparst und in den entsprechenden Variablen gespeichert. Gibt True zurück wenn erfolgreich!
    13. Private Function WerteHolen() as Boolean
    14. WerteHolen = True
    15. Dim FehlerText as String
    16. 'Hier wird versucht, ob die Eingegebenen Werte in den entsprechenden Typ umgewandelt werden können.
    17. On Error GoTo Hell
    18. FehlerText = "Anfangskapital "
    19. Anfangskapital = cCur(txtAnfangskapital.Text)
    20. FehlerText = "EndKapital"
    21. EndKapital = cCur(txtEndkapital.Text)
    22. FehlerText = "Zinssatz"
    23. Zinssatz = cDbl(txtZinssatz.Text)
    24. Exit Function
    25. Hell:
    26. WerteHolen = False
    27. MsgBox(FehlerText & "kann nicht in Zahl umgewandelt werden!")
    28. End Sub
    29. 'Würde ich auf Reset umbenennen. Da hier nicht gelöscht sondern zurückgesetzt wird
    30. Private Sub cmdFeldLoeschen_Click()
    31. txtErgebnisLaufzeit.Text = ""
    32. txtAnfangskapital.Text = "5000"
    33. txtEndkapital.Text = "8540,72"
    34. txtZinssatz.Text = "5,5"
    35. End Sub
    36. Private Sub cmdStart_Click()
    37. 'Wenn die eingegebenen Werte erfolgreich geholt wurden
    38. If WerteHolen() Then
    39. 'Berechne das Ergebnis
    40. ErgebnisLaufzeit = Log(EndKapital / Anfangskapital) / Log(1 + Zinssatz * 100)
    41. 'Zeige das Ergebnis an
    42. WerteAnzeigen()
    43. End If
    44. End Sub
    SWYgeW91IGNhbiByZWFkIHRoaXMsIHlvdSdyZSBhIGdlZWsgOkQ=

    Weil einfach, einfach zu einfach ist! :D

    BiedermannS schrieb:

    Hier mal mein Vorschlag. Selbes Programm,
    selbe Grütze.
    Trennung von Daten und GUI.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!

    BiedermannS schrieb:

    Ah, und das hab nicht getan?

    BiedermannS schrieb:

    Visual Basic-Quellcode

    1. Private Sub cmdFeldLoeschen_Click()
    2. txtErgebnisLaufzeit.Text = ""
    3. txtAnfangskapital.Text = "5000"
    4. txtEndkapital.Text = "8540,72"
    5. txtZinssatz.Text = "5,5"
    6. End Sub
    Defaultwerte in Text-Controls.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Naja wenn das der einzige Grund ist einen Code als "Grütze" zu bezeichnen...

    Hat meines Erachtens nicht zwingend was mit der Trennung der Daten zu tun. Default Werte müssen nicht zwingend an das entsprechende Steuerelement gebunden sein.

    Und wenn wir es schon ganz genau nehmen, dann benötigt man in eben diesen Beispiel sowieso keinen Default Wert, da es keinen Default Wert für Start- oder Endkapital gibt und diese normalerweise manuell oder dynamisch von einer anderen Datenquelle kommen.
    SWYgeW91IGNhbiByZWFkIHRoaXMsIHlvdSdyZSBhIGdlZWsgOkQ=

    Weil einfach, einfach zu einfach ist! :D