PHP Zahlen auf spezielle Werte runden
An dieser Stelle möchte ich ausnahmsweise mal keinen längeren Artikel veröffentlichen, sondern nur einen kleinen Beitrag der vielleicht für manche nützlich ist.
Für verschiedene Projekte benötigte ich die Funktion „schöne“ Preise zu erzeugen. Das heißt zum Beispiel aus einem gegebenen Einkaufspreis einen Verkaufspreis zu berechnen, der aber nicht 12,32 Euro oder ähnlich lauten sollte.
Folgende Funktion ist dabei entstanden:
[pastacode lang=“php“ message=“PHP“ highlight=““ provider=“manual“]
function round_to($number, $step = 1, $sub = 0) {
$number += $sub; // damit auch richtig gerundet wird
if($step == 0 || $step == 1) return round($number) - $sub;
return (round($number / $step) * $step) - $sub;
}
[/pastacode]
Mit dieser Hilfsfunktion lassen sich Zahlen auf (fast) beliebige schöne Summen runden.
Beispiel:
round_to(12.34, 0.5, 0.01) ergibt 12,49 (rundet auf den nächsten 0.5er Schritt und zieht 0.01 ab)
round_to(12.34, 5, 0.01) ergibt 9,99 (rundet auf den nächsten 5er Schritt und zieht 0.01 ab)
round_to(10.7, 2) ergibt 10.0 (rundet auf die nächste gerade Zahl)
Natürlich sollte man für kleinere Zahlen auch andere Rundungen verwenden als für größere. Also zum Beispiel eine zusätzliche IF-Abfrage:
[pastacode lang=“php“ message=“PHP“ highlight=““ provider=“manual“]
$x = irgendeinezahl; // zum beispiel einkaufspreis
$a = $x * 1.2; // 20% Aufschlag sind ungefähr gewünscht
if($a < 5) $a = $a; // nichts tun
elseif($a < 10) $a = round_to($a, 0.5, 0.01);
elseif($a < 50) $a = round_to($a, 1, 0.01);
elseif($a < 150) $a = round_to($a, 5, 0.01);
else $a = round_to($a, 10, 0.10);
[/pastacode]
In diesem Beispiel würde der Aufruf für den Einkaufspreis 1,- zum Beispiel 1,20 ergeben, für 11,- würden sich 12,99 (11 * 1,2 = 13,20) ergeben und für 243,34 würden 289,90 entstehen (243,34 * 1,2 = 292,01).
Danke für diese tolle Funktion ich hatte mir selber auch schon eine Geschrieben aber diese Funktion zum Runden ist schlanker und efiktiver. Jetzt brauch ich sie mir nur noch erweitern. Da ich für meinen Shop 3 Preisgruppen benötige. Ich freue mich auch schon zu sehen was das für ein Feedback Toll wird welches Du noch bastellst. MFG Euer Roger Gerecke