Devuelve el valor redondeado de num
a la precisión precision (número de
dígitos después del punto decimal). El argumento precision
puede ser negativo o null : es su valor por omisión.
Si el argumento precision es positivo,
num será redondeado utilizando el argumento
precision para definir el número significativo
de dígitos después del punto decimal.
Si el argumento precision es negativo,
num será redondeado utilizando el argumento
precision para definir el número significativo
de dígitos antes del punto decimal, i.e. el múltiplo más cercano
de pow(10, -$precision), i.e. para una
precision de -1, num
será redondeado a 10, para una precision de -2 a 100, etc.
mode
Utilice RoundingMode o una de las constantes siguientes para especificar el método de redondeo.
Método de redondeo con 9.5
float(10)
float(9)
float(10)
float(9)
Método de redondeo con 8.5
float(9)
float(8)
float(8)
float(9)
Ejemplo #4 Ejemplo con mode y precision
<?php echo "Uso de PHP_ROUND_HALF_UP con una precisión de una decimal" . PHP_EOL; var_dump(round( 1.55, 1, PHP_ROUND_HALF_UP)); var_dump(round(-1.55, 1, PHP_ROUND_HALF_UP));
echo PHP_EOL; echo "Uso de PHP_ROUND_HALF_DOWN con una precisión de una decimal" . PHP_EOL; var_dump(round( 1.55, 1, PHP_ROUND_HALF_DOWN)); var_dump(round(-1.55, 1, PHP_ROUND_HALF_DOWN));
echo PHP_EOL; echo "Uso de PHP_ROUND_HALF_EVEN con una precisión de una decimal" . PHP_EOL; var_dump(round( 1.55, 1, PHP_ROUND_HALF_EVEN)); var_dump(round(-1.55, 1, PHP_ROUND_HALF_EVEN));
echo PHP_EOL; echo "Uso de PHP_ROUND_HALF_ODD con una precisión de una decimal" . PHP_EOL; var_dump(round( 1.55, 1, PHP_ROUND_HALF_ODD)); var_dump(round(-1.55, 1, PHP_ROUND_HALF_ODD)); ?>
El ejemplo anterior mostrará :
Uso de PHP_ROUND_HALF_UP con una precisión de una decimal
float(1.6)
float(-1.6)
Uso de PHP_ROUND_HALF_DOWN con una precisión de una decimal
float(1.5)
float(-1.5)
Uso de PHP_ROUND_HALF_EVEN con una precisión de una decimal
float(1.6)
float(-1.6)
Uso de PHP_ROUND_HALF_ODD con una precisión de una decimal
float(1.5)
float(-1.5)
As PHP doesn't have a a native number truncate function, this is my solution - a function that can be usefull if you need truncate instead round a number.
<?php /** * Truncate a float number, example: <code>truncate(-1.49999, 2); // returns -1.49 * truncate(.49999, 3); // returns 0.499 * </code> * @param float $val Float number to be truncate * @param int f Number of precision * @return float */ function truncate($val, $f="0") { if(($p = strpos($val, '.')) !== false) { $val = floatval(substr($val, 0, $p + 1 + $f)); } return $val; } ?>
this function (as all mathematical operators) takes care of the setlocale setting, resulting in some weirdness when using the result where the english math notation is expected, as the printout of the result in a width: style attribute!
round() will sometimes return E notation when rounding a float when the amount is small enough - see https://bugs.php.net/bug.php?id=44223 . Apparently it's a feature.
To work around this "feature" when converting to a string, surround your round statement with an sprintf:
Here's a function to round to an arbitary number of significant digits. Don't confuse it with rounding to a negative precision - that counts back from the decimal point, this function counts forward from the Most Significant Digit.