Runden von Fliesskommazahl

dwex

Erfahrenes Mitglied
Hallo Leute,

grundsätzlich weis ich ja wie ich eine Flieskommazahl runden kann - jedoch stehe ich jetzt vor dem problem das ich z.B. die Zahl 699.00005 auf 699.01 runden muss und auch 699.00004 auf 699.01

Wenn ich es mit sprintf("%01.2f", $money) mache dann bekomme ich in jedem Fall 699,00

Hat jemand eine Idee?
 
Da das eigentlich eine falsche Rundung ist, müsstest du dir da selbst was schreiben...

PHP:
<?php
function customRound($value, $precision = 2)
{
	$parts = explode('.', $value);
	$digit = $precision - 1;
	
	$runs = strlen($parts[1]);
	for($i = $runs; $i > 0; $i--)
	{
		if($parts[1][$i] >= 5)
		{
			$parts[1][$digit] = $parts[1][$digit] + 1;
		}
	}
	
	$number = $parts[0].'.';
	$number .= substr($parts[1], 0, $precision);
	
	return $number;
}

echo customRound(699.00005, 3);
?>
Das hier funktioniert z. B., ist allerdings einfach kurz hingeschmiert.
 
Es muss immer auf eine bestimmte Anzahl an Nachkommastellen aufgerundet werden? In den Benutzerkommentaren auf php.net gibt es eine nette Lösung:
http://de3.php.net/manual/de/function.round.php#84780
PHP:
function roundUp( $value, $precision=0 )
{
    // If the precision is 0 then default the factor to 1, otherwise
    // use 10^$precision. This effectively shifts the decimal point to the
    // right.
    if ( $precision == 0 ) {
        $precisionFactor = 1;
    }
    else {
        $precisionFactor = pow( 10, $precision );
    }

    // ceil doesn't have any notion of precision, so by multiplying by
    // the right factor and then dividing by the same factor we
    // emulate a precision
    return ceil( $value * $precisionFactor )/$precisionFactor;
}
 
Als Ergänzung zur Funktion von Grubi (falls immer auf 2 Nachkommastellen aufgerundet werden muss):
PHP:
$zahl = ceil($zahl * 100) / 100;

Karl
 
Zurück