Integer - Splitt vom feinsten :-)



  • lol... 🤡

    nun, ich habe da einen integer wert, sagen wir mal 345364. Das sind in diesem "roh" zustand nun milisekunden.

    Jetzt möchte ich diesen wert einem einzigen label gesplittet zuteilen, und zwar in Day, Hour, Min, Sec.

    Mir wäre schon klar das man dies im ersten schritt mit div. erreichn könnte. also zuerst die sekunden (/1000) dann minuten (/60) etc. somit erreiche ich aber immer nur das jeweils einte und nicht den "kompletten" splitt.

    int D,H,M,S;
        D = 345364 / 1000 / 60 / 60 / 60;
        H = 345364 / 1000 / 60 / 60;
        M = 345364 / 1000 / 60;
        S = 345364 / 1000;
        Label1->Caption = IntToStr(D) + " Tage, " + IntToStr(H) + " Stunden, " + IntToStr(M) + " Minuten, " + IntToStr(S) + " Sekunden";
    

    hier zeige ich nun was ich mit dem nicht kompletten splitten meine. also es ist soweit ja nicht schlecht aber mir ist nocht klar wie ich aus dem integer wert nun dem label klar mache wieviel es von D,H,M,S nun genau ist.

    Also in meinem beispiel wäre das nun:

    0 tage, 0 stunden, 5 minuten, 345 sekunden.

    alles gut bis auf sekunden! denn was mehr als 60 ist sollte ja schon zu minuten rüber gehen. verstanden?



  • Statt die Selbe Operation n-fach auszuführen würdest du besser das Pferd von hinten aufsatteln und die Reihenfolge der Berechnung umkehren und dann mit den Restresultaten weiterrechnen, nur so als Tip.

    Was den Rest angeht, so bin ich zu faul um deine Berechnungen zu kontrollieren, das kannst du bestimmt auch selber.

    -junix

    Ahja, was ich vergass: Kennst du den Modulo-Operator "%" schon?



  • ich kann mit deiner antwort nichts anfang tut mir leid.



  • Hi,

    der Modulo-Operator wird Dir weiterhelfen, und ein Tag hat auch nicht 60 Stunden.

    Ciao
    Loriat



  • Junix meinte:

    int D,H,M,S;
        S = 345364 / 1000;
        M = S / 60;
        H = M / 60;
        D = H / 24;
    
        Label1->Caption = IntToStr(D) + " Tage, " + IntToStr(H) + " Stunden, " + IntToStr(M) + " Minuten, " + IntToStr(S) + " Sekunden";
    

    Comprende? 😮



  • F98: wenn du das jetzt noch mit Modulo gewürzt hättest, dann hättest du recht (o; Aber das schafft happadappa bestimmt auch selber noch (o:

    -junix



  • 🙂

    Ein bisschen die Rübe anstrengen soll er ja auch noch ...



  • Will auch wissen! Modulo? Häh? Gut, ich hätte es mit irgend so nem printf-Zeug gemacht (da kommt % auch IRGENDWIE vor), aber bei dem hier...?



  • Lies mal in nem C Buch oder C Tut ds Kapitel über Arithmetische Operatoren...

    -junix



  • Super idee... Der Rest einer Division... Kann ich ja jetzt viel mit Anfangen.


  • Mod

    Hallo

    stell dich doch nicht so an 🙄

    sekunden / 60 = minuten
    sekunden % 60 = restsekunden

    MfG
    Klaus



  • Sozialer Gedanke, den völlig merkbefreiten auch zu helfen, Klaus (o; Ich muss gestehen, ich hätte ihn jetzt einfach grübeln lassen...

    -junix



  • Ui... Ich hab die falsche Hälfte vom Quelltext als falsch empfunden, deshalb dachte ich, du willst damit die Stringzuweisung machen... dachte nicht, dass du wirklich teilen wolltest.

    Tja, in dem Fall ist es mit % doch besser. Ich hab das mal genauso angefangen wie happadappa. Erst die Tage, dann die Stunden... Um den Rest rauszubekommen, habe ich dann aus dem Float-Wert (das Ergebnis der Division) die Nachkommastellen genommen und dann ... dann ... häh? Keine Ahnung. Hey, war in meinem ersten Prog! Schaut doch selber:

    AnsiString __fastcall TForm1::SekInZeit(int InputSekunden)
    {
        float TageFlt, StundenFlt, MinutenFlt, SekundenFlt;
        int Tage, Stunden, Minuten, Sekunden;
        AnsiString OutputZeit;
        TageFlt = float(InputSekunden)/86400;
        Tage = int(TageFlt);
        StundenFlt = (TageFlt - float(Tage)) * 24;
        Stunden = int(StundenFlt);
        MinutenFlt = (StundenFlt - float(Stunden)) * 60;
        Minuten = int(MinutenFlt);
        SekundenFlt = (MinutenFlt - float(Minuten)) * 60;
        Sekunden = int(SekundenFlt + 0.5);
        if (Sekunden >= 60)
        {
            Minuten++;
            Sekunden = 0;
        }
        OutputZeit.printf("%02d %02d:%02d:%02d", Tage, Stunden, Minuten, Sekunden);
        return OutputZeit;
    }
    

    Ich hab keine Ahnung mehr, was das sollte.

    Naja... der Code von F98 ist dann ja wohl auch falsch. Da sind es ja auch 345 Sekunden... aber... 💡 Klar, hätte er mit %...

    Ok, ich habs. Danke.



  • Plemplem schrieb:

    Naja... der Code von F98 ist dann ja wohl auch falsch. Da sind es ja auch 345 Sekunden... aber... 💡 Klar, hätte er mit %...

    Mein Beispiel sollte nur zur Inspiration dienen ... Steht ja auch sinngemäß da 🙄



  • Schon klar. Bei der Glühbirne hab ich s dann gerafft...


Anmelden zum Antworten