Ankündigung

Einklappen
Keine Ankündigung bisher.

sprintf() - Werte

Einklappen

Neue Werbung 2019

Einklappen
X
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • einfachTara
    hat ein Thema erstellt sprintf() - Werte.

    sprintf() - Werte

    Hallo,

    ich habe ein Problem mit sprintf(). Wenn ich mit meiner Auswertung ins Minus komme spielt alles total verrückt

    Bildschirmfoto 2019-08-14 um 21.59.35.png

    8 Stunden sind im System fest hinterlegt, 06:45 + 2:15 ergibt 9. Was passiert hier?

    PHP-Code:
    <?php echo sprintf("%02d:%02d",floor($Berechnung/60), $Berechnung%60);?>
    Wenn es ins + geht, stimmt wieder alles

    Bildschirmfoto 2019-08-14 um 22.01.51.png

    Ebenfalls wieder 8 Stunden, das wäre 22min zu viel. Stimmt also. Habt ihr eine Idee / Lösung?

  • jspit
    antwortet
    Die im Netz verbreitete Lösung mit fllor() für die Umrechnung von Minuten in Stunden und Minuten ist halt nur für einen Input >=0 richtig.
    Daher ist immer Vorsicht angesagt, "fertige" Lösungen einfach zu kopieren.
    Zumindest bei diesen Beitrag "Convert number of minutes into hours & minutes using PHP" wird zumindest versucht negative Werte abzufangen.
    Die Lösung ist, einfach die richtige Formel zu benutzen:
    PHP-Code:
    $totalMinuten =  134;

    $minutes $totalMinuten 60;
    $hours = (int)(($totalMinuten $minutes)/60); 
    LG jspit

    Einen Kommentar schreiben:


  • jonas3344
    antwortet
    Code:
    134 / 60 = 2.233333  
    floor(2.233333) = 2

    Einen Kommentar schreiben:


  • einfachTara
    antwortet
    DANKE! Aber warum hat es dann bei + immer gepasst?

    Einen Kommentar schreiben:


  • jonas3344
    antwortet
    Code:
    -134 / 60 = -2.233333
    
    floor(-2.233333) = -3

    Einen Kommentar schreiben:


  • einfachTara
    antwortet
    Zitat von hellbringer Beitrag anzeigen

    Lernen die Leute heutzutage nichts mehr in der Schule?

    Wenn du das Vorzeichen entfernen willst, bilde doch einfach den Absolutwert:

    https://www.php.net/manual/de/function.abs.php
    Beleidigen muss ich mich hier von dir nicht lassen oder? Bitte freundlich bleiben, bin ich schließlich auch.
    Danke für den Hinweis zu abs. Hätte ich von Anfang an genutzt wenn ich es gewusst hätte. Ich habe es jetzt so eingebaut

    PHP-Code:
    <?php echo sprintf("%02d:%02d",floor($Berechnung/60), abs($Berechnung%60));?>
    Als Ergebnis habe ich nun -3:14. Jetzt habe ich zwar das zweite - weg, die Rechnung stimmt aber noch immer nicht. Es ist eine Stunde zu viel. Woher kommt diese?

    Einen Kommentar schreiben:


  • einfachTara
    antwortet
    Zitat von jspit Beitrag anzeigen
    einfachTara . Habe #5 noch etwas zugefügt. Probier das mal.
    Hier nochmals das richtige und Vollständige

    PHP-Code:
    echo $SollAufbauzeit// 406 minuten
    echo $stunden*60// 540 Minuten

    $Berechnung $SollAufbauzeit $stunden*60// -134 Minuten 
    In diesem Fall habe ich 134 Minuten Minus. Wenn ich dieses mit

    PHP-Code:
    <?php echo sprintf("%02d:%02d",floor($Berechnung/60), $Berechnung%60);?>
    ausgeben lasse, erhalte ich dieses Ausgabe

    Bildschirmfoto 2019-08-15 um 09.06.20.png

    Was falsch ist. Meine Ausgabe müsste lauten 2 Stunden 24 Minuten (2:24). Da stimmt eines mit dem anderen überhaupt nicht zusammen. Woher kommen die 3:14 wenn das richtige Ergebnis 2:24 lauten müsste und vor allem warum stimmt es wenn es ins + geht?

    Einen Kommentar schreiben:


  • hellbringer
    antwortet
    Zitat von einfachTara Beitrag anzeigen
    ja, sprintf habe ich so tatsächlich aus dem Internet, da man zu mir gesagt hat dieses sei genau das was ich benötige. Bei + funktioniert es ja auch. Das heißt bevor ich sprintf ausgebe sollte ich prüfen ob ich einen + oder - Wert habe? Nur solche Aussagen von dir helfen mir leider überhaupt nicht weiter. Dass ich zwei - Werte habe sehe ich an meiner Ausgabe auch.
    Lernen die Leute heutzutage nichts mehr in der Schule?

    Wenn du das Vorzeichen entfernen willst, bilde doch einfach den Absolutwert:

    https://www.php.net/manual/de/function.abs.php

    Einen Kommentar schreiben:


  • jspit
    antwortet
    einfachTara . Habe #5 noch etwas zugefügt. Probier das mal.

    Einen Kommentar schreiben:


  • einfachTara
    antwortet
    Zitat von hellbringer Beitrag anzeigen
    Hast du den Code irgendwo her kopiert? Denn verstehen tust du irgendwie nicht, was der tut. Wenn du schon Code kopierst, dann solltest du dir zumindest auch das Verständnis davon erarbeiten und nicht einfach nur blind verwenden.

    Bei einer Division (auch bei Modulo) bleibt ein Minus immer Minus. Und wenn in $Berechnung (übrigens ein sehr dummer Variablenname, da er nicht beschreibt was sie für einen Wert enthält) eine negative Zahl enthalten ist, ergeben sowohl /60 also auch %60 eine negative Zahl. Und schon hast du zwei mal Minus in der Ausgabe stehen.
    ja, sprintf habe ich so tatsächlich aus dem Internet, da man zu mir gesagt hat dieses sei genau das was ich benötige. Bei + funktioniert es ja auch. Das heißt bevor ich sprintf ausgebe sollte ich prüfen ob ich einen + oder - Wert habe? Nur solche Aussagen von dir helfen mir leider überhaupt nicht weiter. Dass ich zwei - Werte habe sehe ich an meiner Ausgabe auch.

    Einen Kommentar schreiben:


  • einfachTara
    antwortet
    Zitat von jspit Beitrag anzeigen

    einfachTara : Wenn du Code postest nimm dir bitte die Zeit und teste diesen ob er auch reproduzierbar ist. Das Snippet enthält Syntaxfehler.
    Sorry, da ist leider das v beim kopieren reingeraten. Dieses hat da nichts verloren. Ich habe es in #4 korrigiert.

    Einen Kommentar schreiben:


  • hellbringer
    antwortet
    Hast du den Code irgendwo her kopiert? Denn verstehen tust du irgendwie nicht, was der tut. Wenn du schon Code kopierst, dann solltest du dir zumindest auch das Verständnis davon erarbeiten und nicht einfach nur blind verwenden.

    Bei einer Division (auch bei Modulo) bleibt ein Minus immer Minus. Und wenn in $Berechnung (übrigens ein sehr dummer Variablenname, da er nicht beschreibt was sie für einen Wert enthält) eine negative Zahl enthalten ist, ergeben sowohl /60 also auch %60 eine negative Zahl. Und schon hast du zwei mal Minus in der Ausgabe stehen.

    Einen Kommentar schreiben:


  • jspit
    antwortet
    Zitat von einfachTara Beitrag anzeigen
    Guten Morgen,

    $Berechnung fülle ich wie folgt

    PHP-Code:
    echo $SollAufbauzeit//406
    echo $stunden*60;//9

    $Berechnung $SollAufbauzeit $stunden*60
    einfachTara : Wenn du Code postest nimm dir bitte die Zeit und teste diesen ob er auch reproduzierbar ist. Das Snippet enthält Syntaxfehler.

    Bitte erstelle eines minimales reproduzierbares Beispiel!

    Wenn Du ein Problem hier in das Forum stellst, können die Benutzer besser helfen, wenn du Code bereitstellst,
    der leicht verstehen ist und zum Reproduzieren des Problems beim Helfer verwendet werden kann.

    Wie soll der Code beschaffen sein?
    - minimal
    Der Code soll vom Umfang so gering wie möglich sein, jedoch das Problem weiter sichtbar machen.
    - vollständig und reproduzierbar
    Zeige alle Teile die eine andere Person benötigt um dein Problem auf seinen System reproduzieren zu können.
    Teste den reduzierten Code um sicherzustellen, das dein Problem reproduziert werden kann.
    Liefere deinen Testablauf als Information mit. Also
    - Was hast du ausprobiert
    - welche Datenbasis wurde benutzt (Daten reproduzierbar mitliefern, kein var_dump!)
    - Was erwartest du als Ergebnis
    - Was erhältst du als Ergebnis

    LG jspit

    Einen Kommentar schreiben:


  • einfachTara
    antwortet
    Guten Morgen,

    $Berechnung fülle ich wie folgt

    PHP-Code:
    echo $SollAufbauzeit//406
    echo $stunden*60//9

    $Berechnung $SollAufbauzeit $stunden*60

    Einen Kommentar schreiben:


  • chorn
    antwortet
    Ja, zeig mal ein nachvollziehbares (copy and paste) Beispiel.

    Einen Kommentar schreiben:

Lädt...
X