Ausgabe und Formatierung von Zahlen mit PHP

Unterschiedliche Länder – unterschiedliche Darstellung. Aber auch so möchtest du vielleicht einfach als Tausender-Trennzeichen ein Leerzeichen einfügen. Du könntest dir selbst eine Funktion mit einer Schleife und substr() programmieren, kannst aber auch einfach die passende PHP Funktion verwenden.
In diesem Artikel möchte ich neben dem automatischen Anpassen von Zahlen auch auf das Runden und Vergleichbares von Zahlen mit PHP eingehen.

Prüfen ob es sich um eine Zahl handelt

Zunächst kann es wichtig sein zu wissen, ob es sich bei einer gegebenen Variable um eine Zahl handelt. Wenn etwa Daten per Formular übergeben werden und in einer Datenbank gespeichert werden, sollte man überprüfen ob es sich tatsächlich um eine Zahl handelt.

Diese Aufgabe erfüllt is_numeric(). Wenn es sich bei der in den Klammern angebenen Variable um eine Zahl handelt (auch Zahl mit Nachkommastellen) wird TRUE zurückgegeben, sonst FALSE. Zur Veranschaulichung hier ein Beispiel:

$zahl1 = 1;
$zahl2 = '2';

if (is_numeric($zahl1) && is_numeric($zahl2)) {
echo 'Beides sind Zahlen.';
} else {
echo 'Es sind nicht beides Zahlen.';
}

In diesem Fall würde „Beides sind Zahlen.“ ausgegeben werden. Das zeigt auch eine Besonderheit von is_numeric(). Auch eine Zahl, die als String gespeichert wird ($zahl2), kann damit als solche erkannt werden.

Variable zu INT konvertieren

Nehmen wir an – was etwas ungünstig wäre – du würdest Zahlen in einer Datenbank als Text (z.B. im VARCHAR Feld) speichern und diese anschließend auslesen. PHP würde hier annehmen, dass es sich um einen String handelt, es sei denn du benutzt eine Funktion wie is_numeric(). Wenn du mit dieser Zahl dann allerdings rechnen möchtest, musst du sie vorher umwandeln.

Dafür gibt es die folgenden zwei Möglichkeiten:
$zahl = (int) $string; // 1. Benutze (int) vor Angabe der Variable

$zahl = intval($string); // 2. Benutze die Funktion intval()

Um z.B. aus dem String „6.378XYZ“ die Nachkommazahl „6.378“ zu machen, kannst du stattdessen (float) und floatval() verwenden.

Zahlen runden

Bei dem Runden gibt es verschiedene Möglichkeiten. Egal ob ab-, auf- oder Nachkommastellen runden. Für jede dieser Optionen gibt es in PHP eine eigene Funktion.

  • Aufrunden
    Um Zahlen mit Nachkommastellen (float) auf den nächst größeren Integer (Ganzzahl) aufzurunden kann ganz einfach die Funktion ceil() benutzt werden:$zahl = ceil($zahl);
  • Abrunden
    Für das Abrunden hingegen gibt es die Funktion floor(), welches selbiges in die andere Richtung tut.
  • Zahlen allgemein runden
    Die meisten Möglichkeiten bietet round(). Die wie folgt angewendet wird:

    $zahl = round(variable, nachkommastellen, modus);
    Der Modus ist übrigens bei Zahlen wie 0.5, 1.5 etc. entscheidend. Möchtest du eine Zahl bis auf zwei Nachkommastellen runden, dann geht das so:$zahl = round(6.345, 2); // Ergebnis: $zahl ist gleich 6.35
    Bei einer negativen Angabe der Nachkommastellen wird dann auf Zehntel, Hundertstel usw. gerundet:$zahl = round(122, -1); // Auf Zehntel genau: $zahl ist gleich 120

Zahlen mit PHP formatieren

Nun kommen wir zu dem Teil der auch schon in der Überschrift verankert ist: Dem Formatieren von Zahlen. Dabei wird diese dann allerdings zu einem String, sodass dies nur zur Ausgabe dient.

Dafür gibt es die Funktion number_format(). Es gibt zwei Möglichkeiten, die Funktion aufzurufen, einmal

$schoene_zahl = number_format(zahl, nachkommastellen);

oder

$schoene_zahl = number_format(zahl, nachkommastellen, trennzeichen nachkommastellen, tausender trennzeichen);

Das Beispiel zeigt ganz gut, dass entweder ein, zwei oder vier Parameter angegeben werden können.

Die erste Variante mit zwei Parametern funktioniert im Prinzip wie round(). Allerdings können mit vier Parametern hier ebenfalls die Trennzeichen festgelegt werden, zum Beispiel so:

echo number_format(12000.56012, 2, '.', ' ');

Die Ausgabe wäre in diesem Fall: „12 000.56“, denn es wurden 2 Nachkommastellen, das Trennzeichen „.“ und das Tausender Trennzeichen “ “ festgelegt.

Bei den Trennzeichen kannst du selbstverständlich auch noch ganze andere Formate verwenden, um die Zahlen mit PHP auszugeben.

Nachkommastellen einfach abschneiden

Bisher ging ich davon aus, dass number_format() bei der Übergabe von zwei Parametern nicht rundet. Nach einem Hinweis von Sascha (siehe Kommentar, danke dafür) habe ich nun festgestellt, dass auch number_format() rundet.

Deswegen habe ich eine kleine Funktion entwickelt, die Nachkommastellen einfach abschneidet ohne zu runden. Du kannst Dir diese hier anschauen oder die PHP-Funktion mit Beispiel downloaden.

function cutNumber($number, $decimals=4) {
  $number = explode(".", $number, 2);
  $shortCount = strlen($number[1]) - $decimals;

  return floatval($number[0].".".substr($number[1], 0, (($shortCount <= 0) ? strlen($number[1]) : -$shortCount)));
}

Als ersten Parameter ($number) übergibst Du einfach die gewünschte Zahl und als zweiten Parameter ($decimals) dann die Anzahl der Nachkommastellen, die ungerundet abgeschnitten werden sollen.

Hier ein Beispiel für den Einsatz der Funktion:

echo cutNumber(6.344678, 4); // Ausgabe von 6.3446

6 Gedanken zu „Ausgabe und Formatierung von Zahlen mit PHP“

  1. Ich will vier Nachkommastellen ausgeben, aber ohne zu runden. Leider rundet er auch in deinem Beispiel:

    Um nur x Nachkommastellen anzuzeigen (d.h. es wird nicht gerundet), nutze diesen Code:

    $schoene_zahl = number_format(4.678, 2); // Ergebnis: $schoene_zahl (string) ist gleich 4.67.

    1. Hallo Sascha,

      Danke für deine Anmerkung. Du hattest Recht. Ich habe den Abschnitt angepasst und eine kleine Funktion entwickelt, die Du hier downloaden kannst. Probiere sie doch einmal aus und teile mir dann mit, ob sie so funktioniert, wie gewünscht.

      Schöne Grüße
      Tristan

  2. bei deiner Version komm immer undifined Offset 1

    habs mal umgeschreiben und funktioniert, ergebniss wird am ende mit 0 aufgefüllt
    also 13.866633333 = 13.86
    oder 13.1 = 13.10
    oder 13 = 13.00

    hier der code

    function cutNumber($number, $decimals=2) {
    $number = explode(„.“, $number, 2);
    print_r($number);
    if(!isset($number[1])) {
    return $number[0].“.00″;
    } else {
    return $number[0].“.“.substr($number[1].str_repeat(„0“, $decimals), 0, $decimals);
    }
    }