1 Reaktion

PHP Zahlen auf spezielle Werte runden

Geschätzte Lesedauer:

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).

Unabhängige Berichterstattung unterstützen.

Unterstütze wirklich unabhängige und Fakten-basierte Berichterstattung zu Mozilla, welche nicht das Ziel hat, Schlagzeilen zu produzieren, sondern objektiv zu informieren.

Dieser Artikel wurde von Marius Burkard verfasst.

Marius Burkard ist Diplom-Wirtschaftsinformatiker und arbeitet seit 2006 als selbstständiger Software-Entwickler und Linux-Server-Administrator mit der Firma pixcept KG. Er ist unter anderem mitverantwortlich für die Projekte Was-lese-ich.de und ISPProtect.

1 Kommentar - bis jetzt!

Eigenen Kommentar verfassen
  1. Roger Gerecke
    schrieb am :

    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

Und jetzt du! Deine Meinung?

Erforderliche Felder sind mit einem Asterisk (*) gekennzeichnet. Die E-Mail-Adresse wird nicht veröffentlicht.
  1. Nach Absenden des Kommentar-Formulars erfolgt eine Verarbeitung der von Ihnen eingegebenen personenbezogenen Daten durch den datenschutzrechtlich Verantwortlichen zum Zweck der Bearbeitung Ihrer Anfrage auf Grundlage Ihrer durch das Absenden des Formulars erteilten Einwilligung.
    Weitere Informationen