Navigation
 Startseite
 Fachbücher
 Anzeigenmarkt
 Forum
 Webmaster News
 Script Newsletter
 Kontakt
 Script Installation
 Php
 Php Tutorials
 Webhoster Vergleich
 Impressum

Community-Bereich
 kostenlos Registrieren
 Anmelden
 Benutzerliste

Script Datenbank
 Script Archiv
 Script Top 20
 Screenshots
 Testberichte

Suche
 

Unsere Php Scripts
 Counter Script
 Umfrage Script
 Bilder Upload Script
 Terminverwaltung
 Simple PHP Forum
 RSS Grabber

Script Mods
 phpBB Adsense Mode

Tools und Generatoren
 .htpasswd Generator
 md5 Generator
 base64 Generator
 Markdown to HTML
 Colorpicker
 Unix timestamp Tool
 TLD Liste
 Webkatalog‑Verzeichnis

Partner
 Sprüche Treff

Hosterplus.de
Bekommen Sie Speicherplatz (Webspace), Domains...
https://www.Hosterplus.de
Artfiles.de
Bietet Serviceorientierte...
https://www.Artfiles.de
 
 
 

PHP round() Funktion: Der ultimative Leitfaden zur präzisen Zahlenrundung

Sie befinden sich: Home > Php Tutorial > PHP round() meistern - Rund...

PHP round() meistern - Rundungslogik verstehen und gezielt anwenden


Eintrag am:  21.05.2025
Hits / Besucher:  1051
Sprache:  Deutsch
Kategorie:  Fortgeschrittene Tut...
Tutorial Art:  eigenes
Eingetragen von   schubertmedia schubertmedia
 
Beschreibung

Ob beim Bezahlen im Onlineshop, beim Berechnen von Statistiken oder beim Speichern von Messergebnissen: Korrekt gerundete Zahlen sind in der Softwareentwicklung unverzichtbar. Die PHP-Funktion round() ist das zentrale Werkzeug für mathematisches Runden und bietet vier verschiedene Rundungsmodi für jeden Anwendungsfall.

Titelbild zu PHP round(): Abstraktes PHP-Logo neben einem runden Zahlenrad mit Segmenten wie 1.5, 2.5, 3.14159 und Pfeilen zur Visualisierung von Rundungsmodi.

In diesem Tutorial lernst du die Syntax, alle vier Rundungsmodi, typische Praxisbeispiele und die Fallstricke der Gleitkomma-Arithmetik kennen. Am Ende weißt du, wann du round() einsetzt und wann ceil(), floor() oder number_format() die bessere Wahl ist.

Syntax und Parameter von round()

Die Funktion erwartet eine Zahl als Pflichtparameter und bietet zwei optionale Parameter für Präzision und Rundungsmodus:

float round(float $num, int $precision = 0, int $mode = PHP_ROUND_HALF_UP)

Der Parameter $num ist die zu rundende Zahl. Mit $precision legst du fest, auf wie viele Nachkommastellen gerundet wird. Positive Werte stehen für Dezimalstellen, negative Werte runden vor dem Komma (z.B. auf Zehner oder Hunderter). Der dritte Parameter $mode bestimmt, wie mit dem Grenzfall .5 umgegangen wird.

<?php

echo round(3.14159, 2); // 3.14
echo round(1234.56, -2); // 1200
?>

Die Funktion gibt immer einen float zurück, auch wenn das Ergebnis eine Ganzzahl ist. round(3.0) ergibt float(3), nicht int(3).

Die vier Rundungsmodi im Überblick

PHP bietet vier Konstanten, die das Verhalten bei .5-Werten steuern. Werte, die nicht exakt auf .5 enden, werden immer zum nächsten Nachbarn gerundet, unabhängig vom Modus.

PHP_ROUND_HALF_UP (Standard)

Werte mit .5 werden vom Nullpunkt weg gerundet. Das ist die klassische Schulbuch-Rundung:

<?php

echo round(1.5); // 2
echo round(2.5); // 3
echo round(-1.5); // -2
?>

PHP_ROUND_HALF_DOWN

Werte mit .5 werden zum Nullpunkt hin gerundet:

<?php

echo round(1.5, 0, PHP_ROUND_HALF_DOWN); // 1
echo round(2.5, 0, PHP_ROUND_HALF_DOWN); // 2
echo round(-1.5, 0, PHP_ROUND_HALF_DOWN); // -1
?>

PHP_ROUND_HALF_EVEN (Bankers' Rounding)

Liegt ein Wert genau auf .5, wird zur nächsten geraden Zahl gerundet. Dieser Modus wird in Statistiken und Finanzen verwendet, um bei vielen Rundungen eine systematische Verzerrung zu vermeiden:

<?php

echo round(1.5, 0, PHP_ROUND_HALF_EVEN); // 2 (gerade)
echo round(2.5, 0, PHP_ROUND_HALF_EVEN); // 2 (gerade)
echo round(3.5, 0, PHP_ROUND_HALF_EVEN); // 4 (gerade)
?>

PHP_ROUND_HALF_ODD

Wie HALF_EVEN, aber es wird zur nächsten ungeraden Zahl gerundet. Dieser Modus ist selten im Einsatz:

<?php

echo round(1.5, 0, PHP_ROUND_HALF_ODD); // 1 (ungerade)
echo round(2.5, 0, PHP_ROUND_HALF_ODD); // 3 (ungerade)
?>

Alle Rundungsmodi im direkten Vergleich

Die folgende Tabelle zeigt, wie sich dieselbe Zahlenreihe je nach Modus unterschiedlich runden lässt:

Zahl HALF_UP HALF_DOWN HALF_EVEN HALF_ODD
0.51001
1.52121
2.53223
3.54343
-1.5-2-1-2-1
-2.5-3-2-2-3

So siehst du auf einen Blick, wann welcher Modus welches Ergebnis liefert.

Bankers' Rounding: Wann es Pflicht ist

In der Finanzbuchhaltung kann Bankers' Rounding (HALF_EVEN) vorgeschrieben sein, zum Beispiel nach IEEE 754 oder in bestimmten EU-Regulierungen. Der Grund: Bei vielen Rundungen gleichen sich Auf- und Abrundungen statistisch aus, während HALF_UP systematisch nach oben verzerrt.

<?php

/* 1000 Transaktionen: HALF_UP vs. HALF_EVEN */
$werte = [];
for ($i = 0; $i < 1000; $i++) {
$werte[] = $i * 0.5 + 0.25;
}

$summeUp = 0;
$summeEven = 0;
foreach ($werte as $w) {
$summeUp += round($w, 0, PHP_ROUND_HALF_UP);
$summeEven += round($w, 0, PHP_ROUND_HALF_EVEN);
}
echo "HALF_UP: $summeUp\n";
echo "HALF_EVEN: $summeEven\n";
/* Die Summendifferenz zeigt die Verzerrung */
?>

Praxisbeispiele

Die folgenden Beispiele zeigen round() in typischen Alltagssituationen.

Preise runden (2 Dezimalstellen)

<?php

$netto = 49.95;
$brutto = round($netto * 1.19, 2);
echo $brutto; // 59.44
?>

Auf Zehner und Hunderter runden (negative Präzision)

<?php

echo round(1234.56, -1); // 1230
echo round(1234.56, -2); // 1200
echo round(1234.56, -3); // 1000
?>

Negative Zahlen runden

Bei negativen Zahlen bedeutet „vom Nullpunkt weg“ (HALF_UP), dass -2.5 zu -3 gerundet wird, also in Richtung der größeren Absolutzahl:

<?php

echo round(-2.5); // -3 (vom Nullpunkt weg)
echo round(-2.5, 0, PHP_ROUND_HALF_DOWN); // -2
echo round(-2.5, 0, PHP_ROUND_HALF_EVEN); // -2
?>

Rundung in Arrays mit array_map

In der Praxis werden selten einzelne Zahlen gerundet, sondern ganze Datenreihen. Mit array_map() rundest du alle Werte eines Arrays in einem Schritt:

<?php

$messwerte = [3.456, 7.891, 2.345, 9.678];

/* Einfach: Auf Ganzzahlen runden */
$gerundet = array_map('round', $messwerte);
// [3, 8, 2, 10]

/* Mit Closure: Auf 1 Dezimalstelle */
$gerundet = array_map(
fn($w) => round($w, 1),
$messwerte
);
// [3.5, 7.9, 2.3, 9.7]
?>

Rundung auf beliebige Schritte (5er, Viertelstunden)

Manchmal musst du nicht auf Dezimalstellen runden, sondern auf bestimmte Schrittweiten. Das allgemeine Pattern lautet: round($wert / $schritt) * $schritt.

<?php

/* Auf 5 Cent runden */
$preis = 12.43;
echo round($preis * 20) / 20; // 12.45

/* Auf Viertelstunden runden (15 Minuten) */
$minuten = 37;
echo round($minuten / 15) * 15; // 45

/* Auf 25er-Stufen runden */
$wert = 137;
echo round($wert / 25) * 25; // 150
?>

Vergleich: round(), ceil(), floor() und number_format()

Jede dieser Funktionen hat einen eigenen Zweck. Die folgende Tabelle zeigt die Unterschiede auf einen Blick:

Funktion Zweck Rückgabetyp Dezimalstellen Modus wählbar
round()Mathematisch rundenfloatJaJa
ceil()Immer aufrundenfloatNeinNein
floor()Immer abrundenfloatNeinNein
number_format()Formatieren für AnzeigestringJaNein
sprintf()Formatieren für AnzeigestringJaNein

Faustregeln: Verwende round(), wenn du mit dem Ergebnis weiterrechnen willst. Greife zu number_format() oder sprintf(), wenn du das Ergebnis nur anzeigen möchtest. Brauchst du garantiertes Auf- oder Abrunden, nimm ceil() oder floor().

Fallstricke und Best Practices

Beim Runden in PHP gibt es einige Stolperfallen, die besonders bei Finanzberechnungen zu Problemen führen können.

Gleitkomma-Präzision (Float-Problem)

Computer speichern Fließkommazahlen intern als Binärbrüche. Viele Dezimalwerte lassen sich nicht exakt darstellen. Das führt zu überraschenden Ergebnissen:

<?php

$summe = 0.1 + 0.2;
echo $summe; // 0.30000000000000004
echo round($summe, 2); // 0.3 (hier korrekt)
?>

Der Klassiker: round(2.55, 1) ergibt 2.5 statt 2.6

Dieses Problem trifft Entwickler bei Preisberechnungen besonders hart:

<?php

echo round(2.55, 1); // 2.5 (nicht 2.6!)

/* Warum? 2.55 wird intern als
2.54999999... gespeichert */
echo sprintf('%.20f', 2.55);
// 2.54999999999999982236
?>

Lösungen für exakte Finanzberechnungen:

<?php

/* Lösung 1: Rechne in Cent (Integer) */
$preisInCent = 255; // 2,55 €
echo round($preisInCent / 10) / 10; // 2.6

/* Lösung 2: BCMath für exakte Dezimalrechnung */
echo bcadd('2.55', '0', 1); // 2.5
?>

JSON-Serialisierung und round()

Beim Arbeiten mit REST-APIs ist ein Detail wichtig: json_encode(round(1.0)) erzeugt 1.0 (Float), nicht 1 (Integer). Wenn deine API einen Integer erwartet, caste das Ergebnis explizit:

<?php

$wert = round(5.0);
echo json_encode($wert); // 5.0
echo json_encode((int)$wert); // 5

/* JSON_PRESERVE_ZERO_FRACTION kontrolliert
ob 1.0 als 1.0 oder 1 serialisiert wird */
echo json_encode(1.0, JSON_PRESERVE_ZERO_FRACTION);
// 1.0
?>

Häufig gestellte Fragen

Hier findest du Antworten auf die gängigsten Fragen rund um das Runden in PHP.

Warum ergibt round(2.55, 1) nicht 2.6?

Weil 2.55 intern als 2.54999... gespeichert wird (Float-Darstellungsproblem). Für exakte Ergebnisse rechne in Cent (Integer) oder verwende BCMath.

Wie runde ich auf 5 Cent oder 5 Rappen?

<?php

$betrag = 12.43;
$gerundet = round($betrag * 20) / 20;
echo $gerundet; // 12.45
?>

round() oder number_format() für Preise?

Verwende round() zum Rechnen und number_format() zur Anzeige. round() gibt einen Float zurück, mit dem du weiterrechnen kannst. number_format() gibt einen formatierten String zurück (z.B. „1.234,56“), der nur für die Ausgabe taugt.

Wie runde ich immer auf oder immer ab?

Verwende ceil() zum Aufrunden und floor() zum Abrunden. Diese Funktionen ignorieren die .5-Grenze und runden konsequent in eine Richtung.

Ändert sich round() zwischen PHP-Versionen?

In PHP 8.0 wurde das Typ-Handling verschärft: Nicht-numerische Werte lösen jetzt einen TypeError aus, während PHP 7 sie stillschweigend in 0 umwandelte. Das Rundungsverhalten selbst ist gleich geblieben. Details findest du in der offiziellen PHP-Migrationsanleitung.

Fazit

Die PHP-Funktion round() ist flexibel und deckt mit ihren vier Rundungsmodi die meisten Anforderungen ab. Wähle den Modus passend zur Aufgabe: HALF_UP für Standardrundung, HALF_EVEN für Statistiken und Finanzbuchhaltung. Sei dir der Float-Eigenheiten bewusst, besonders bei Preisberechnungen. Im Zweifel ist die Integer-Cent-Rechnung der sicherste Weg. Für die formatierte Ausgabe greifst du am Ende zu number_format().

 


Kommentare (0)

Noch keine Kommentare. Sei der Erste!

Melde dich an, um einen Kommentar zu schreiben.
Bücherregal mit drei Büchern: 'PHP 4 - Grundlagen und Profiwissen' von Hanser Verlag, 'Webdesign in a Nutshell' von O'Reilly Verlag, und 'Webgestaltung' von Galileo Computing.