Hans: % zwischen zwei Beträgen errechnen

Guten Abend,

ich habe zwei Preise, ein hoher ein niedriger. Wie kann ich mit PHP die Differenz in % errechnen?

Zwei Beispiele:

Preis teuer = 25,00 | Preis günstig = 14,95

oder

Preis teuer = 19,99 | Preis günstig = 2,19

gibt es dafr in PHP eine einfache Formel die ich verwenden kann?

  1. Hallo,

    gibt es dafr in PHP eine einfache Formel die ich verwenden kann?

    dafür gibt es unabhängig von PHP eine einfache Formel (eigentlich sogar zwei, denn du musst festlegen, was 100% sein soll).

    Gruß
    Kalk

    1. @@Tabellenkalk

      eine einfache Formel (eigentlich sogar zwei,

      Wieso zwei?

      denn du musst festlegen, was 100% sein soll).

      Anders gesagt: du musst festlegen, was Grundwert und was Prozentwert sein soll.

      Da ist sie, die eine Formel.

      LLAP 🖖

      --
      Ist diese Antwort anstößig? Dann könnte sie nützlich sein.
      1. Hallo Gunnar Bittersmann,

        eine einfache Formel (eigentlich sogar zwei,

        Wieso zwei?

        Einige sehen durchaus einen Unterschied zwischen Formel und Gleichung.

        Da ist sie, die eine Formel.

        Die eine Gleichung ;-)

        Bis demnächst
        Matthias

        --
        Signaturen sind bloed (Steel) und Markdown ist mächtig.
        1. @@Matthias Apsel

          Einige sehen durchaus einen Unterschied zwischen Formel und Gleichung.

          Wie in den binomischen Formeln und der binomischen Gleichung?

          LLAP 🖖

          --
          Ist diese Antwort anstößig? Dann könnte sie nützlich sein.
          1. Hallo Gunnar Bittersmann,

            Einige sehen durchaus einen Unterschied zwischen Formel und Gleichung.

            Wie in den binomischen Formeln und der binomischen Gleichung?

            Genau. Aber da es binomischer Satz heißt, habe ich auf dieses Beispiel verzichtet. ;-)

            Bis demnächst
            Matthias

            --
            Signaturen sind bloed (Steel) und Markdown ist mächtig.
  2. @@Hans

    Wie kann ich … die Differenz in % errechnen?

    Nicht.

    Prozent ist eine Einheit für ein Verhältnis, nicht für eine Differenz.

    LLAP 🖖

    --
    Ist diese Antwort anstößig? Dann könnte sie nützlich sein.
    1. Hallo,

      Prozent ist eine Einheit für ein Verhältnis, nicht für eine Differenz.

      Man könnte also die Differenz berechnen und die dann einerseits zum höheren, andererseits zum niedrigeren ins Verhältnis setzen. zack, zwei Gleichungen, badabummtsss...

      Gruß
      Kalk

    2. Guten Abend,

      ok ich vestehe, es geht also nicht. Dann muss ich mir irgendwie etwas anderes einfallen lassen um die % autoamtisch errechnen zu lassen. Vielen dank für eure Antworten.

      1. @@Hans

        ok ich vestehe

        Scheint mir nicht so.

        es geht also nicht.

        Was genau sollte nicht gehen?

        Dann muss ich mir irgendwie etwas anderes einfallen lassen um die % autoamtisch errechnen zu lassen.

        Welche Prozente denn genau?

        Vielen dank für eure Antworten.

        Wenn sie denn wenigstens fruchtbar wären.

        LLAP 🖖

        --
        Ist diese Antwort anstößig? Dann könnte sie nützlich sein.
        1. Gutne Abend,

          Was genau sollte nicht gehen?

          scheinbar ist es nicht möglich die diverzent in % auszugeben. Oftmals lese ich auf Preischilder "Sie sparen 14%" diese % ergeben sich aus dem alten und dem neuen Preis. PHP ist scheinbar nicht in der Lage dieses zu errechen.

          1. @@Hans

            scheinbar ist es nicht möglich die diverzent in % auszugeben.

            Ja, Differenzen kann man nicht in Prozent angeben, sondern nur Verhältnisse. Die Differenz zwischen zwei Preisen ergibt sich in Euro (oder was auch immer für einer Währung).

            Oftmals lese ich auf Preischilder "Sie sparen 14%" diese % ergeben sich aus dem alten und dem neuen Preis.

            Das ist dann aber keine Differenz, sondern ein Verhältnis: das Verhältnis aus der Differenz der Preise zum ursprünglichen Preis (Grundwert).

            PHP ist scheinbar nicht in der Lage dieses zu errechen.

            PHP ist in der Lage, alles zu errechnen, wozu du in der Lage bist, das in einer Formal auszudrücken.

            Um der Frage zuvorzukommen: Die entsprechende Formel habe ich dir eben genannt.

            LLAP 🖖

            --
            Ist diese Antwort anstößig? Dann könnte sie nützlich sein.
            1. Moin,

              Oftmals lese ich auf Preischilder "Sie sparen 14%" diese % ergeben sich aus dem alten und dem neuen Preis.

              Das ist dann aber keine Differenz, sondern ein Verhältnis: das Verhältnis aus der Differenz der Preise zum ursprünglichen Preis (Grundwert).

              Ach, immer diese hoch wissenschaftlichen Definitionsfragen. Du weißt doch, was er meint. Und das Beispiel erklärt doch alles. ;)

              @@Hans. PHP kann alle Rechenoperationen. Du musst nur bestimmen was er rechnen soll. Für eine Differenz als prozentuales Verhältnis ausgedrückt, empfehle ich dir den einfachen Dreisatz. Nehmen wir aP (alter Preis) als Basis (das sind die angesprochenen 100%). Dieser betrage 100 euro. Der nP (also neuer verringerter Preis) ist 89 euro. Also 11 euro weniger. Nun setzt man dies richtig in ein verhältnis. 100eur zu 100% = 100eur-89eur zu X. Durch den Dreisatz ergibt sich nun die Formel: x= (100eur-89eur) * 100% / 100eur... Und voila, da ist die Formel.

              In PHP

              $aP = 100;
              $nP = 89;
              
              echo ($aP-$nP)*100/$np;
              

              Du siehst, PHP kann rechnen. Es war eben nur nicht klar ob vom neuen Preis oder vom alten Preis ausgegangen werden sollte. Da gibt es auch keine allgemeingültige Regel oder gar Funktion. Denn die beiden Varianten machen einen riesen Unterschied.

              Gruß Bobby

              --
              -> Für jedes Problem gibt es eine Lösung, die einfach, sauber und falsch ist! <- ### Henry L. Mencken ### -> Nicht das Problem macht die Schwierigkeiten, sondern unsere Sichtweise! <- ### Viktor Frankl ### ie:{ br:> fl:{ va:} ls:< fo:) rl:( n4:( de:> ss:) ch:? js:( mo:} sh:) zu:)
              1. @@bobby

                Ach, immer diese hoch wissenschaftlichen Definitionsfragen.

                Da ist nichts Hochwissenschaftliches dran; das ist Schulwissen.

                Du weißt doch, was er meint.

                Das Problem ist aber, ob Hans weiß, was er meint. Wenn er nicht in der Lage ist, sein Problem zu beschreiben, ist er auch nicht in der Lage, es zu lösen. Und darum geht es ja hier in diesem Forum: Fragende in die Lage zu versetzen, ihre Probleme SELF zu lösen. Also erstmal in die Lage zu versetzen, ihre Probleme zu beschreiben.

                Für eine Differenz als prozentuales Verhältnis ausgedrückt,

                Du musst grundsätzlich falsche Ausdrucksweisen nicht wiederholen.

                empfehle ich dir den einfachen Dreisatz.

                Dreisatz ist hier IMHO alles andere als einfach. Die Prozentrechnung erscheint IMHO nur deshalb kompliziert, weil sie in der Schule als etwas Kompliziertes dargestellt und gelehrt wird.

                Einfach ist: Prozent ist eine Einheit für ein Verhältnis, also einen Quotienten P : G. (Das setzt das Grundverständnis voraus, dass es sich um ein Verhältnis, nicht um eine Differenz handelt.)

                Ein Verhälnis von – sagen wir – 0,42 dann in Prozent umzurechnen geht genauso wie einen Preis von 0,42 Euro in Cent umzurechnen (die Ähnlichkeit der Namen der Einheiten ist alles andere als zufällig!) oder wie eine Länge von 0,42 Meter in Zentimeter.

                Aber auf mich hört ja keiner.

                LLAP 🖖

                --
                Ist diese Antwort anstößig? Dann könnte sie nützlich sein.
                1. @@Gunnar Bittersmann

                  Einfach ist: Prozent ist eine Einheit für ein Verhältnis

                  Und zwar von gleichartigen Dingen (bspw. von Preisen), die in der gleichen Einheit (bspw. Euro) angegeben sind, welche sich dann wegkürzt, so dass das Verhältnis dimensionslos (ohne Einheit[1]) ist.

                  Ein Verhälnis von unterschiedlichen Dingen, bspw. einem Weg (41 km) zur einer Zeit (2 h), lässt sich natürlich nicht in Prozent umrechnen, da 20,5 km/h nicht dimensionslos ist.

                  LLAP 🖖

                  --
                  Ist diese Antwort anstößig? Dann könnte sie nützlich sein.

                  1. oder anders (besser?) gesagt: mit der Einheit Eins. ↩︎

  3. Hallo,

    Preis teuer = 25,00 | Preis günstig = 14,95

    wie wäre es damit? (14,95-25)/25 = 40,20%

    1. @@Sara

      wie wäre es damit? (14,95-25)/25 = 40,20%

      Wenn du dich da mal nicht im Vorzeichen vertan hast.

      Und genauer: (14,95 − 25 ) / 25 = −40,20%

      LLAP 🖖

      --
      Ist diese Antwort anstößig? Dann könnte sie nützlich sein.
      1. Hallo,

        Wenn du dich da mal nicht im Vorzeichen vertan hast. Und genauer: (14,95 − 25 ) / 25 = −40,20%

        stimmt, dieses habe ich unterschlagen, was allerdings auch nicht so wichtig ist, denn es soll ja wie Hans hier geschrieben hat als Antwort "Sie sparen 14%" herauskommen.

        In diesem Fall steht also Sie sparen 40,20%

        1. @@Sara

          stimmt, dieses habe ich unterschlagen, was allerdings auch nicht so wichtig ist

          Doch, doch, schon wichtig. Denn …

          denn es soll ja wie Hans hier geschrieben hat als Antwort "Sie sparen 14%" herauskommen.

          … in PHP übersetzt:

          <?php if (p < 0): ?>
            <p>Sie sparen <?= -p/100 ?>%</p>
          <?php else: ?>
            <p>Sie zahlen <?= p/100 ?>% drauf</p>
          <?php endif; ?>
          

          :-)

          LLAP 🖖

          --
          Ist diese Antwort anstößig? Dann könnte sie nützlich sein.
  4. Hallo Hans,

    ich habe zwei Preise, ein hoher ein niedriger. Wie kann ich mit PHP die Differenz in % errechnen?

    Diese Angabe kann man vielfältig deuten und beantworten. Ich nehme an, Du willst wissen und berechnen, um wieviel % ein höherer Preis teurer ist als ein niedrigerer. Wenn also Preis 1 500€ und Preis 2 750€ beträgt, dann ist der höhere Preis um 50% teurer.

    In diesem Fall ist folgender Weg eine Möglichkeit:

    <?php
    
      // Gegeben sind 2 Preise, von denen jeder der größere sein könnte:
    
      $preis_1 = floatval(25);
      $preis_2 = floatval(14.95);
    
      // Die 2 Preise kommen in ein Array und werden nach Größe sortiert.
      // Der erste Wert des Arrays ist dann der niedrigere Preis:
    
      $preise = array($preis_1, $preis_2);
      sort($preise);
    
      // Der erste, kleinere Preis ist 100%.
      // Berechnet wird nun, wieviel % somit der größere Preis ist.
      // Zieht man davon 100 ab, weiß man, um wieviel % der 2. Preis höher ist.
      // Das Ergebnis wird dann noch auf die Einserstelle gerundet:
    
      $prozent = round(($preise[1]*100/$preise[0])-100);
    
      // Ergebnis:
    
      echo $preise[1].'€ ist um '.$prozent.'% teurer als '.$preise[0].'€.';
    
    ?>
    

    Mit lieben Grüßen

    Melvin Cowznofski

    --
    Melvin Cowznofski What – me worry?
    1. Guten Abend,

      vielen Dank für deine Hilfe und deinem Beispiel. Ich habe es etwas abgeändert, denn ich benötige nur die Ersparnis.

      <?php
      
        // Gegeben sind 2 Preise, von denen jeder der größere sein könnte:
      
        $preis_1 = floatval(25);
        $preis_2 = floatval(14.95);
      
        // Die 2 Preise kommen in ein Array und werden nach Größe sortiert.
        // Der erste Wert des Arrays ist dann der niedrigere Preis:
      
        $preise = array($preis_1, $preis_2);
        sort($preise);
      
        // Der erste, kleinere Preis ist 100%.
        // Berechnet wird nun, wieviel % somit der größere Preis ist.
        // Zieht man davon 100 ab, weiß man, um wieviel % der 2. Preis höher ist.
        // Das Ergebnis wird dann noch auf die Einserstelle gerundet:
      
        $prozent = ($preise[1]-$preise[0])/$preise[1]*100;
      
        // Ergebnis:
      
        echo 'Sie sparen '.$prozent.'%';
      
      ?>
      

      Sollte doch richtig sein oder? Als Ergebnis erhalte ich Sie sparen 40.2%

      1. Guten Abend,

        hab noch eine Zusatzfrage. Wollte Sie sparen 40.2% in Sie sparen 40,2% ändern.

          $prozent = str_replace(".", "", ",", $prozent);
          echo 'Sie sparen '.$prozent.'%';
        

        Jetzt erhalte ich Sie sparen ,%.

        Laut http://php.net/manual/de/function.str-replace.php kann ich str_replace dazu nutzen.

        1. Tach!

          Jetzt erhalte ich Sie sparen ,%.

          Laut http://php.net/manual/de/function.str-replace.php kann ich str_replace dazu nutzen.

          Ja, aber du musst es auch richtig einsetzen. Wie die Parameter zu vergeben sind, steht ja auf der von dir verlinkten Seite.

          dedlfix.

        2. Hallo,

            $prozent = str_replace(".", "", ",", $prozent);
            echo 'Sie sparen '.$prozent.'%';
          

          es muss so lauten

          $prozent = str_replace(".", ",", $prozent);
          echo 'Sie sparen '.$prozent.'%';
          

          Du willst ja nur ein . in ein , ändern.

    2. @@Melvin Cowznofski

        // Gegeben sind 2 Preise, von denen jeder der größere sein könnte:
      
        $preis_1 = floatval(25);
        $preis_2 = floatval(14.95);
      
        // Die 2 Preise kommen in ein Array und werden nach Größe sortiert.
        // Der erste Wert des Arrays ist dann der niedrigere Preis:
      
        $preise = array($preis_1, $preis_2);
      

      Wieso packst du die Werte erst in Variablen und nicht gleich in ein Array?

        sort($preise);
      

      Die Sache mit dem Array und dem Sortieren kannst du dir sparen, indem du abs($preis_1 - $preis_2) / min($preis_1, $preis_2) berechnest.

        // Der erste, kleinere Preis ist 100%.
        // Berechnet wird nun, wieviel % somit der größere Preis ist.
        // Zieht man davon 100 ab, weiß man, um wieviel % der 2. Preis höher ist.
        // Das Ergebnis wird dann noch auf die Einserstelle gerundet:
      
        $prozent = round(($preise[1]*100/$preise[0])-100);
      

      round(($preise[1] / $preise[0] - 1) * 100) sieht einfacher und verständlicher aus.

        // Ergebnis:
      
        echo $preise[1].'€ ist um '.$prozent.'% teurer als '.$preise[0].'€.';
      

      echo.. ist auch ein recht sicheres Indiz, dass man etwas falsch™ macht.

      Mit Platzhaltern: printf('%2$01.2f€ ist um %3$d%% teurer als %1$01.2f€.', $preise[0], $preise[1], $prozent)

      oder bei Ausgabe in HTML: <?= $preise[1] ?>€ ist um <?= $prozent ?>% teurer als <?= $preise[0] ?>€.

      Und zwischen der Zahl und dem €-Zeichen sollte eigentlich Leerraum sein, vorzugszweise U+202F NARROW NO-BREAK SPACE; in HTML also &#x202F;

      LLAP 🖖

      --
      Ist diese Antwort anstößig? Dann könnte sie nützlich sein.
      1. Hallo Gunnar,

        Wieso packst du die Werte erst in Variablen und nicht gleich in ein Array?

        Ganz einfach, weil ich dem OP die Sache so einfach und grundlegend als möglich erklären wollte und sie deshalb "bis auf den einfachsten Nenner zerlegt habe". Was ihm - by the way - sicher mehr hilft als die schon kritisierte unnötige Erbsenzähler-Diskussion.

        Diese Antwort gilt auch für den Rest all Deiner Einwände.

        Mit lieben Grüßen

        Melvin Cowznofski

        --
        Melvin Cowznofski What – me worry?
        1. @@Melvin Cowznofski

          weil ich dem OP die Sache so einfach und grundlegend als möglich erklären wollte […]
          Diese Antwort gilt auch für den Rest all Deiner Einwände.

          Das tut sie eben nicht.

          abs($preis_1 - $preis_2) / min($preis_1, $preis_2) ist ja wohl einfacher als die Frickelei mit einem Array.

          Und dass round(($preise[1] / $preise[0] - 1) * 100) einfacher und verständlicher aussieht als dein round(($preise[1] * 100 / $preise[0]) - 100), erwähnte ich auch.

          LLAP 🖖

          --
          Ist diese Antwort anstößig? Dann könnte sie nützlich sein.
  5. Ich finde es nicht in Ordnung, dass eine in der Umgangssprache formulierte Frage zu nicht hifreichen Fachsimpeleien führt. Alles Oberlehrer hier oder was?

    ich habe zwei Preise, ein hoher ein niedriger. Wie kann ich mit PHP die Differenz in % errechnen?

    Wikipedia: "Differenz (von lateinisch differentia „Unterschied, Verschiedenheit“)"

    Kann man sehr wohl in Prozent ausdrücken. Oder in absoluten Werten.

    Preis teuer = 25,00 | Preis günstig = 14,95

    Umgangssprachlich sollte klar sein, dass der erste Wert 100% sein soll. Daraus ergibt sich, was 1 Prozent ist:

    $einprozent = 25.00 / 100; // = 0.25

    Nun die Frage, wie oft passen Einprozent in den zweiten Wert?

    $wievielprozent = 14.95 / $einprozent; // = 59.8

    Oberlehrer: "Aber nun bitte im ganzen Satz".

    echo "Der niedrige Preis von 14.95 ist ".100 -$wievielprozent."% günstiger als 25.00";

    Oberlehrer: "Bananen oder was?"

    Linuchs

    1. Moin,

      Ich finde es nicht in Ordnung, dass eine in der Umgangssprache formulierte Frage zu nicht hifreichen Fachsimpeleien führt. Alles Oberlehrer hier oder was?

      Dann hast du wohl meine Antwort überlesen? :p

      Gruß Bobby

      --
      -> Für jedes Problem gibt es eine Lösung, die einfach, sauber und falsch ist! <- ### Henry L. Mencken ### -> Nicht das Problem macht die Schwierigkeiten, sondern unsere Sichtweise! <- ### Viktor Frankl ### ie:{ br:> fl:{ va:} ls:< fo:) rl:( n4:( de:> ss:) ch:? js:( mo:} sh:) zu:)
      1. Hallo,

        Dann hast du wohl meine Antwort überlesen? :p

        ganz zu schweigen von meiner Antwort.

        Mit lieben Grüßen

        Melvin Cowznofski

        --
        Melvin Cowznofski What – me worry?
    2. @@Linuchs

      Ich finde es nicht in Ordnung, dass eine in der Umgangssprache formulierte Frage zu nicht hifreichen Fachsimpeleien führt.

      Ich denke, ich habe deutlich gemacht, dass das Verstehen des Problems und die richtige Verwendung von Begriffen zwei Seiten derselben Medaille sind.

      Wikipedia: "Differenz (von lateinisch differentia „Unterschied, Verschiedenheit“)"

      In der Mathematik ist die Differenz nicht irgendein Unterschied, sondern das Ergebnis einer Subtraktion. Und um Mathematik geht es hier.

      Alles Oberlehrer hier oder was?

      Nö.

      LLAP 🖖

      --
      Ist diese Antwort anstößig? Dann könnte sie nützlich sein.