Zeiten richtig Berechnen! (closed)

  • VB.NET
  • .NET (FX) 1.0–2.0

Es gibt 11 Antworten in diesem Thema. Der letzte Beitrag () ist von Cheffboss.

    Zeiten richtig Berechnen! (closed)

    Moin! :)
    Ich habe ein Rechenproblem.
    Im meinem Programm kann man beliebgies Guthaben aufladen.
    Aber jede Sekunde wird ein teil vom Guthaben abgezogen.
    Zum Beispiel 1 Euro, für eine Stunde.
    Dann wird jede Sekunde vom Guthaben etwas abgezogen.
    Weiß jemand, wie dies möglich wäre?
    Für jedes Guthaben.
    BIG THX

    Edit1:
    (Siehe unten)
    Visual Basic.NET 8o
    MS-SQL
    8o

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

    Was soll das bedeuten:

    Cheffboss schrieb:

    (0,0001 jede Sekunde = 1 Euro)

    Ich habe das Gefühl, dass hier viele Infos fehlen, denn sonst wäre es ja so pillepalle wie das hier:

    VB.NET-Quellcode

    1. Dim Guthaben As Integer = 1000
    2. Public Sub ErhöheGuthabenUm(Zusatzbetrag As Integer)
    3. Guthaben += Zusatzbetrag
    4. End Sub
    5. Public Sub TimerZerfrisstMeinGuthaben_Tick(sender As Object, e As EventArgs) Handles TimerZerfrisstMeinGuthaben.Tick
    6. 'Intervall ist mit 1000 ms eingestellt und wurde gestartet
    7. Guthaben -= 1
    8. End Sub


    Und was hat es damit auf sich:

    Cheffboss schrieb:

    Für jedes Guthaben.
    Wenn Du natürlich 100(000) verschiedene Guthaben hast, hast Du bestimmt auch eine List(Of Guthaben)*. Und die gehst Du mit LINQ oder ForEach durch und ziehst von jedem Guthaben den entsprechenden Betrag ab.

    *falls Guthaben eine Klasse** ist, für den Anfang zum Testen reicht ggf. auch eine List(Of Integer)

    ** ... dann solltest Du eine Nachricht an die Guthabenklasseninstanzen senden (= Klassenmethodenaufruf), dass sie den Betrag selber um 1 senken sollen.
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.

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

    @Cheffboss Du musst die Dauer vom Start bis jetzt mit einer TimeSpan-Instanz berechnen.
    Von dieser kannst Du dann deverse verflossenen Zeitspannen in Sekunden, Minuten, Stunden auslesen.
    docs.microsoft.com/de-de/dotne…pan?view=netframework-4.8
    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!
    Ist ungetestet.

    Kannst die Berechnung auch jeweils über den Begin machen, so wie es RFG beschreibt.
    Ist genauer und ergibt keine Summierungsfehler.

    Freundliche Grüsse

    exc-jdbi

    VB.NET-Quellcode

    1. Option Strict On
    2. Option Explicit On
    3. Public Module Module1
    4. Public Sub Main()
    5. Dim ba = New TimeAccount With {.BeginAccounting = DateTime.Now,
    6. .Credit = 123456}
    7. ba.LastAccounting = ba.BeginAccounting
    8. ' Wait your time
    9. Threading.Thread.Sleep(3600000)
    10. Payment(ba)
    11. End Sub
    12. Private Sub NewInpayment(ByRef taccount As TimeAccount, value As Double)
    13. taccount.Credit += value
    14. End Sub
    15. Private Sub Payment(ByRef taccount As TimeAccount)
    16. Dim diff = DateTime.Now - taccount.LastAccounting
    17. Dim span = TimeSpan.FromTicks(diff.Ticks)
    18. Dim tax = span.TotalHours
    19. With taccount
    20. .LastAccounting = DateTime.Now
    21. .Credit -= tax
    22. .TotalTax += tax
    23. End With
    24. End Sub
    25. End Module
    26. Public Class TimeAccount
    27. Public Credit As Double
    28. Public TotalTax As Double
    29. Public LastAccounting As DateTime
    30. Public BeginAccounting As DateTime
    31. End Class

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „exc-jdbi“ ()

    Nun, mit Deinem Code hast Du auch eine Lösung beschrieben. Was ist also das bestehende Problem?
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.

    Cheffboss schrieb:

    In meinen Fall wären der Wert „-0.0001“ pro Sekunde.
    Das wären dann für 1 Euro genau 60 Minuten Surfzeit.


    0.0001€ pro Sekunde sind nicht gleich 1€ pro Stunde ?
    »There's no need to "teach" atheism. It's the natural result of education without indoctrination.« — Ricky Gervais

    Cheffboss schrieb:

    VB.NET-Quellcode

    1. guthaben -= Decimal.Parse(0.0001)
    Fang an mit Option Strict On.
    Visual Studio - Empfohlene Einstellungen
    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!

    Cheffboss schrieb:

    Habe nun eine neue Frage.
    Dann stelle sie am besten in einem neuen Thread, diesen hier mach zu.
    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!