% zwischen zwei Beträgen errechnen
Hans
- php
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?
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
@@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 🖖
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
@@Matthias Apsel
Einige sehen durchaus einen Unterschied zwischen Formel und Gleichung.
Wie in den binomischen Formeln und der binomischen Gleichung?
LLAP 🖖
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
@@Hans
Wie kann ich … die Differenz in % errechnen?
Nicht.
Prozent ist eine Einheit für ein Verhältnis, nicht für eine Differenz.
LLAP 🖖
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
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.
@@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 🖖
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.
@@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 🖖
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
@@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 🖖
@@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 🖖
oder anders (besser?) gesagt: mit der Einheit Eins. ↩︎
Hallo,
Preis teuer = 25,00 | Preis günstig = 14,95
wie wäre es damit? (14,95-25)/25 = 40,20%
@@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 🖖
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%
@@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 🖖
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
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%
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.
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.
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.
@@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 … €
LLAP 🖖
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
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 🖖
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
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
@@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?
LLAP 🖖