Lukas .: PHP Auf nächsten Hunderter aufrunden

Hallo,

wie kann ich per Einzeiler immer auf den nächsten 100er aufrunden?

Also 0.01 = 100 10 = 100 50 = 100

aber

100.01 = 200

usw.

Lukas

  1. Hallo Lukas,

    wie kann ich per Einzeiler immer auf den nächsten 100er aufrunden?

    Also 0.01 = 100 10 = 100 50 = 100

    aber

    100.01 = 200

    function round_up($number) {
      return ceil($number / 100) * 100;
    }
    
    echo round_up(0.01), "\n";
    echo round_up(10), "\n";
    echo round_up(50), "\n";
    echo round_up(100.01), "\n";
    

    Ausgabe:

    100
    100
    100
    200
    

    LG,
    CK

    1. Hallo,

      function round_up($number) {
        return ceil($number / 100) * 100;
      }
      
      echo round_up(0.01), "\n";
      echo round_up(10), "\n";
      echo round_up(50), "\n";
      echo round_up(100.01), "\n";
      

      Es war nach Einzeiler gefragt, nicht Achtzeiler ;)
      Beim Funktionsnamen könnte man vielleicht auf die 100 verweisen: roundUp_100() oder so.

      Gruß
      Kalk

      1. Hi,

        function round_up($number) {
          return ceil($number / 100) * 100;
        }
        
        echo round_up(0.01), "\n";
        echo round_up(10), "\n";
        echo round_up(50), "\n";
        echo round_up(100.01), "\n";
        

        Es war nach Einzeiler gefragt, nicht Achtzeiler ;)

        was willst du denn - der Funktionsaufruf ist doch ein Einzeiler! :-)

        Beim Funktionsnamen könnte man vielleicht auf die 100 verweisen: roundUp_100() oder so.

        Ich würde noch einen Schritt weiter gehen und die Stelle, auf die ich runden möchte, als zweiten Parameter übergeben - eventuell mit einem Defaultwert von 0 für "Runden auf Einerstelle".

        So long,
         Martin

        1. Hallo Martin,

          Es war nach Einzeiler gefragt, nicht Achtzeiler ;)

          Tschulligung, dass ich ein braver Programmierer sein wollte und Tests angefügt habe ;-)

          was willst du denn - der Funktionsaufruf ist doch ein Einzeiler! :-)

          Der Funktionsaufruf ist eigentlich nur eine Abstraktion wegen DRY.

          Beim Funktionsnamen könnte man vielleicht auf die 100 verweisen: roundUp_100() oder so.

          Ich würde noch einen Schritt weiter gehen und die Stelle, auf die ich runden möchte, als zweiten Parameter übergeben - eventuell mit einem Defaultwert von 0 für "Runden auf Einerstelle".

          Das würde ich auch tun (mit Default-Wert auf den am häufigsten anzunehmenden Fall), aber der geneigte Leser muss ja auch noch etwas zu tun haben ;-)

          LG,
          CK

        2. @@Der Martin

          Ich würde noch einen Schritt weiter gehen und die Stelle, auf die ich runden möchte, als zweiten Parameter übergeben - eventuell mit einem Defaultwert von 0 für "Runden auf Einerstelle".

          Yep. Und zwar analog zum Parameter precision bei der round()Funktion.

          Und ich würde die Funktion auch nicht round_up nennen, sondern bspw. ceilPrecision:
          float ceilPrecision ( float $val [, int $precision = 0 ]).

          function ceilPrecision($val, $precision = 0)
          {
            return ceil($val * pow(10, $precision)) / pow(10, $precision);
          }
          

          Kann es da nicht evtl. beim Potenzieren, Multiplizieren und Dividieren zu unschönen Fehlern kommen? (Dezimalsystem vs. Binärsystem) Vielleicht doch besser so?

          function ceilPrecision($val, $precision = 0)
          {
            return round(ceil($val * pow(10, $precision)) / pow(10, $precision), $precision);
          }
          

          Aufruf:

          ceilPrecision(0.01, -2);   // 100
          ceilPrecision(10, -2);     // 100
          ceilPrecision(50, -2);     // 100
          ceilPrecision(100.01, -2); // 200
          

          LLAP 🖖

          --
          “You might believe there are benefits for the developer, but first of all, you should put those behind the interest of the user.” —Stefan Tilkov
          Selfcode: sh:) fo:} ch:? rl:) br:> n4:& va:| de:> zu:} fl:{ ss:| ls:# js:|
    2. Hi Christian,

      function round_up($number) {
        return ceil($number / 100) * 100;
      }
      
      echo round_up(0.01), "\n";
      echo round_up(10), "\n";
      echo round_up(50), "\n";
      echo round_up(100.01), "\n";
      

      Ausgabe:

      100
      100
      100
      200
      

      Die Lösung gefällt mir schon sehr gut (inkl. auch der von den anderen Usern nachfolgend genannten Ergänzungen).

      Vielen Dank für die Hilfe.

      Luk

  2. wie kann ich per Einzeiler immer auf den nächsten 100er aufrunden?

    Also 0.01 = 100 10 = 100 50 = 100

    aber

    100.01 = 200

    hi lukas, so vielleicht?

    wenn wert <= 100 dann wert = 100 oder wert = 200 die 100 könntest du variabel machen und und einer schleife je durchlauf um 100 erhöhen so hoch wie du willst.

    hab ich dich richtig verstanden? gruss Gustl

    1. Hallo,

      hi lukas, so vielleicht?

      wenn wert <= 100 dann wert = 100 oder wert = 200 die 100 könntest du variabel machen und und einer schleife je durchlauf um 100 erhöhen so hoch wie du willst.

      Ich glaub, solche Tipps sind der Grund dafür, dass PHP son negatives Image hat (bzw. hatte?)

      hab ich dich richtig verstanden?

      das war ein Scherz, oder?

      Gruß
      Kalk

      1. Hi,

        wenn wert <= 100 dann wert = 100 oder wert = 200 die 100 könntest du variabel machen und und einer schleife je durchlauf um 100 erhöhen so hoch wie du willst.

        Ich glaub, solche Tipps sind der Grund dafür, dass PHP son negatives Image hat (bzw. hatte?)

        glaube ich nicht, denn das ist eine Frage des Konzepts - da kann PHP nichts dafür. Derart ungünstige bzw. in der Praxis unbrauchbare Lösungsansätze kann man auch in jeder anderen Programmiersprache anbieten.

        das war ein Scherz, oder?

        Ich fürchte, nein.

        So long,
         Martin

        1. das war ein Scherz, oder?

          Ich fürchte, nein.

          ich fürchte doch