Dividiren sie nicht durch null obwohl ich multipiziere

  • VB.NET

Es gibt 36 Antworten in diesem Thema. Der letzte Beitrag () ist von Biotechniker.

    Dividiren sie nicht durch null obwohl ich multipiziere

    Hey Leute,

    bin inzwischen sehr weit. Nun komm ich mla wieder net weiter.
    Wenn ich diesen Code starte ...

    VB.NET-Quellcode

    1. Function zeitcode()
    2. Dim jahr As Integer = Nothing
    3. Dim tag As Integer = Nothing
    4. Dim stunde As Integer = Nothing
    5. Dim minu As Integer = Nothing
    6. Dim sekunde As Integer = Nothing
    7. jahr = zeit(5) * 365
    8. tag = (zeit(3) + DateTime.Now.DayOfYear + jahr) * 24
    9. stunde = (zeit(2) + tag) * 60
    10. minu = (zeit(1) + stunde) * 60
    11. sekunde = zeit(0) + minu
    12. Return minu
    13. End Function
    14. Function zeit()
    15. Dim zeit2 As Integer() = {My.Computer.Clock.LocalTime.Second, My.Computer.Clock.LocalTime.Minute, My.Computer.Clock.LocalTime.Hour, My.Computer.Clock.LocalTime.Day, My.Computer.Clock.LocalTime.Month, My.Computer.Clock.LocalTime.Year}
    16. Return zeit2
    17. End Function

    ... kommt immer bei diesem Stück code " minu = (zeit(1) + stunde) * 60 " eine Fehlermeldung " Dividieren sie nicht durch Null"
    Wieso? ich dividiere garnicht durch null

    MfG Biotechniker
    Der eigentliche Fehler ist ein arithmetischer Überlauf. "Dividieren Sie nicht durch 0" ist ein (etwas verwirrender) Lösungsvorschlag.
    Jahr, Tag, und Stunde enthalten sehr grosse Zahlen, Tag enthält den Wert 17605584, Stunde enthält den Wert 1056335940, Und das ganze multiplizierst du nochmal?
    Der Datentyp Integer ist begrenzt auf Zahlen bis 2.147.483.648, Du solltest auf den nächsthöheren Datentyp Long setzen.

    Über den Sinn dieser Berechnung denke ich noch gar nicht nach. Mit einigen Infos mehr postet hier jemand vielleicht einen ganz simplen Code dafür.
    Also ich möchte einen Timer programmieren!
    Dieser Code soll die aktuelle zeit in sekunden brechnen. Dazu habe ich einen neuen Code der aus einer Eingaben (Datum und Zeit) eine Zahl berechnet. Die möchte ich von einander abziehen und den rest der Zahl wieder in ein Datum und Uhrzeit setzen so habe ich einen Timer bis zur angebenen Zeit. Und so kann ich dann auch sagen wenn 1h übrig sind, eine Massangebox öffnen mit Nachicht " 1 Stunde bis PC downup" und einen Cowndown ab 10 sekunden setzten!
    So nun bin ich soweit

    VB.NET-Quellcode

    1. Private Sub Timer2_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer2.Tick
    2. Dim Timerzeit As Integer = zeitcode() - Einagencode()
    3. Label1.Text = Timerzeit
    4. Label1.Text = Einagencode().ToString + zeitcode().ToString
    5. End Sub
    6. '0
    7. Function zeitcode()
    8. Dim jahr As Long = Nothing
    9. Dim ta As Long = Nothing
    10. Dim stund As Long = Nothing
    11. Dim minu As Long = Nothing
    12. Dim sekunde As Long = Nothing
    13. jahr = (zeit(5) - startzeit) * 365
    14. ta = (DateTime.Now.DayOfYear + jahr) * 24
    15. stund = (zeit(2) + Tag) * 60
    16. minu = (zeit(1) + stund) * 60
    17. sekunde = zeit(0) + minu
    18. Return sekunde
    19. End Function
    20. 'x
    21. Function Einagencode()
    22. Dim jahr As Long = Nothing
    23. Dim ta As Long = Nothing
    24. Dim stund As Long = Nothing
    25. Dim minu As Long = Nothing
    26. Dim sekunde As Long = Nothing
    27. jahr = (startzeit - Eingabelesen(5)) * 365
    28. ta = (Eingabelesen(3) + Monatrechner() + jahr) * 24
    29. stund = (Eingabelesen(2) + ta) * 60
    30. minu = (Eingabelesen(1) + stund) * 60
    31. sekunde = Eingabelesen(0) + minu
    32. Return sekunde
    33. End Function
    34. '0
    35. Function Monatrechner()
    36. Dim monat As Integer = Eingabelesen(4)
    37. Dim gesamtmontag As Integer = 0
    38. If monat >= 1 Then gesamtmontag = gesamtmontag + 31
    39. If monat >= 2 Then gesamtmontag = gesamtmontag + 28 '+ schaltjahr()
    40. If monat >= 3 Then gesamtmontag = gesamtmontag + 31
    41. If monat >= 4 Then gesamtmontag = gesamtmontag + 30
    42. If monat >= 5 Then gesamtmontag = gesamtmontag + 31
    43. If monat >= 6 Then gesamtmontag = gesamtmontag + 30
    44. If monat >= 7 Then gesamtmontag = gesamtmontag + 31
    45. If monat >= 8 Then gesamtmontag = gesamtmontag + 31
    46. If monat >= 9 Then gesamtmontag = gesamtmontag + 30
    47. If monat >= 10 Then gesamtmontag = gesamtmontag + 31
    48. If monat >= 11 Then gesamtmontag = gesamtmontag + 30
    49. If monat = 12 Then gesamtmontag = gesamtmontag + 31
    50. Return gesamtmontag
    51. End Function
    52. Function zeit()
    53. Dim zeit2 As Integer() = {My.Computer.Clock.LocalTime.Second, My.Computer.Clock.LocalTime.Minute, My.Computer.Clock.LocalTime.Hour, My.Computer.Clock.LocalTime.Day, My.Computer.Clock.LocalTime.Month, My.Computer.Clock.LocalTime.Year}
    54. Return zeit2
    55. End Function
    56. Function Eingabelesen()
    57. Dim eingabe As Integer() = {RichTextBox3.Text, RichTextBox2.Text, RichTextBox1.Text, RichTextBox6.Text, RichTextBox5.Text, RichTextBox4.Text}
    58. Return eingabe
    59. End Function

    tja und nun zählt das ding net runter sondern hoch?!?!
    Ich bin gerade woll überfragt
    Kann mir jemand helfen?
    Hey,

    ohne mir deinen Code näher angesehen zu haben und ich hoffe, ich habe dein Anliegen richtig verstanden; wäre es nicht einfacher, du verwendest für deine Zwecke nicht einfach ".Substract()"?

    Also als Beispiel:

    VB.NET-Quellcode

    1. Dim ziel As System.DateTime = CDate("19.09.2009 18:59:23")
    2. Dim jetzt As System.DateTime = System.DateTime.Now
    3. ' Bis zur Ziel-Zeit sind es noch x Sekunden:
    4. Label1.Text = ziel.Subtract(jetzt).TotalSeconds.ToString

    Dadurch ersparst du dir doch einige Zeilen an Umrechnung, etc....

    Gruß, Manschula
    Ich habs net verstanden, kannste es mir nochmal erklären?
    //edit
    Okey ich habs verstanden! Danke so erspare ich mir viell arbeit danke!

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „Biotechniker“ ()

    Hey,

    ich habe dieses Thema nur kurz überflogen, also kann es auch sein, dass ich dein Problem bzw. dein Anliegen nicht ganz verstanden habe.

    Wenn ich dich richtig verstanden habe, willst du doch einen Timer programmieren, der dir bei jedem Aufruf angibt, wie viel Sekunden (Minuten, Stunden, Tage) es noch bis zu einem bestimmten Zeitpunkt sind. Dies macht mein kleiner Code oben; er zeigt dir an, wie viele Sekunden es von jetzt bis zu deinem bestimmten Ziel-Zeitpunkt noch sind.

    Gruß, Manschula
    Ich möchte meine PC oder Server um an einem bestimmten tag herunter fahren! und einen Timer anzeigen.
    kannste hier mir nochmal helfen?

    VB.NET-Quellcode

    1. Public Class Form1
    2. Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick
    3. Dim ziel As System.DateTime = CDate("Eingabelesen(3).Eingabelesen(4).Eingabelesen(5) Eingabelesen(0):Eingabelesen(1):Eingabelesen(2)")
    4. Dim jetzt As System.DateTime = System.DateTime.Now
    5. ' Bis zur Ziel-Zeit sind es noch x Sekunden:
    6. Dim ausgabe As Long = ziel.Subtract(jetzt).TotalSeconds
    7. Label1.Text = ausgabe
    8. End Sub
    9. Function Eingabelesen()
    10. Dim eingabe As Integer() = {RichTextBox3.Text, RichTextBox2.Text, RichTextBox1.Text, RichTextBox6.Text, RichTextBox5.Text, RichTextBox4.Text}
    11. Return eingabe
    12. End Function
    13. Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
    14. Timer1.Start()
    15. End Sub
    16. End Class
    Hey,

    dazu benötigst du die Differenz-Zeit aber nicht als Datum ;) Einfach prüfen, wie viel Sekunden noch übrig sind; falls <= 0 Meldung ausgeben bzw. PC herunterfahren.

    Also zum Beispiel so:

    VB.NET-Quellcode

    1. Public Class Form1
    2. Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
    3. ' // Timer starten mit dem Interval 1 Sekunde //
    4. Timer1.Interval = 1000
    5. Timer1.Start()
    6. End Sub
    7. Private Sub Timer1_Tick(ByVal sender As Object, ByVal e As System.EventArgs) Handles Timer1.Tick
    8. ' // Dieser Bereich wird jede Sekunde ausgeführt //
    9. ' Ausrechnen, wie viel Sekunden noch übrig sind
    10. Dim ziel As System.DateTime = CDate("20.09.2009 20:38:40")
    11. Dim jetzt As System.DateTime = System.DateTime.Now
    12. Dim restsekunden As Double = ziel.Subtract(jetzt).TotalSeconds
    13. ' Rest-Sekunden in Label1 ausgeben
    14. Label1.Text = restsekunden.ToString
    15. ' Timer stoppen und Computer herunterfahren, wenn 0 Sekunden übrig
    16. If restsekunden <= 0 Then
    17. Timer1.Stop()
    18. MsgBox("Herunterfahren")
    19. End If
    20. End Sub
    21. End Class

    Ich hoffe, dass konnte dir weiterhelfen.

    Gruß, Manschula
    Hey,

    und jetzt? In deinem Code oben war bisher auch noch keine Überprüfung drin; und nach dieser hast du doch gefragt. Dann baue deinen RTB Teil halt wieder ein...

    Übrigens ist eine RTB die denkbar schlechteste Möglichkeit, ein Datum (samt Uhrzeit) einzugeben.

    Gruß, Manschula
    Hey,

    besser wäre zum Beispiel die "DateTimePicker-" Komponente (Format auf "Custom" und CustomFormat auf "dd.MM.yyyy HH:mm:ss" stellen) Dann würde dein Code so aussehen:

    VB.NET-Quellcode

    1. Dim ziel As System.DateTime = DateTimePicker1.Value

    Gruß, Manschula