Ankündigung

Einklappen
Keine Ankündigung bisher.

sprintf() - Werte

Einklappen

Neue Werbung 2019

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

  • 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?

  • #2
    Der Fehler dürfte dort liegen wo du $Berechnung berechnest und nicht auf dieser Zeile.

    Kommentar


    • #3
      Ja, zeig mal ein nachvollziehbares (copy and paste) Beispiel.
      [I]You know, my wife sometimes looks at me strangely. „Duncan“, she says, „there's more to life than Solaris“. Frankly, it's like she speaks another language. I mean, the words make sense individually, but put them together and it's complete nonsense.[/I]

      Kommentar


      • #4
        Guten Morgen,

        $Berechnung fülle ich wie folgt

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

        $Berechnung $SollAufbauzeit $stunden*60

        Kommentar


        • #5
          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

          Kommentar


          • #6
            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.

            Kommentar


            • #7
              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.

              Kommentar


              • #8
                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.

                Kommentar


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

                  Kommentar


                  • #10
                    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

                    Kommentar


                    • #11
                      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?

                      Kommentar


                      • #12
                        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?

                        Kommentar


                        • #13
                          Code:
                          -134 / 60 = -2.233333
                          
                          floor(-2.233333) = -3

                          Kommentar


                          • #14
                            DANKE! Aber warum hat es dann bei + immer gepasst?

                            Kommentar


                            • #15
                              Code:
                              134 / 60 = 2.233333  
                              floor(2.233333) = 2

                              Kommentar

                              Lädt...
                              X