2011-04-13 15 views
6

tengo un pequeño problema y podría ser tonta en alguna parte, pero todavía lo tengo :)tonto, no puede averiguar ronda php abajo :(

Así que el problema es:

Al hacer esto

round(615.36*0.10, 2, PHP_ROUND_HALF_DOWN); 

espero resultado sea 61.53, pero es 61.54.

phpVersion = 5.3.2 

¿Alguien podría ayudarme a resolver esto? Gracias.

Respuesta

11

PHP_ROUND_HALF_DOWN redondeará el medio - es decir, la parte 0.005.

si tiene 61.535, utilizando PHP_ROUND_HALF_DOWN le conseguirá 61.53 - en lugar de la 61.54 que debería haber obtenido con habitual redondeo.
Basicall, .005medio ha sido redondeado hacia abajo.

Pero 61.536 no es un medio: .006 es más que .005; por lo que redondear ese valor da 61.54.



En su caso, usted podría multiplicar el valor por 100, utilice la función floor(), y dividir el resultado por 100 - supongo que le daría lo que espera:

$value = 61.536; 
$value_times_100 = $value * 100; 
$value_times_100_floored = floor($value_times_100); 
$value_floored = $value_times_100_floored/100; 
var_dump($value_floored); 

me da:

float(61.53) 
+0

Sí, te dije, será tonto: D – arma

1

que, obviamente, sólo queriendo dos decimales ¿por qué no solo number_format (615.36 * 0.10, 2)

+0

sí que es exactamente lo que quiero, pero ya no era mi pregunta sólo puedo dar upvote. Gracias – arma

+0

No funciona, ya que redondea: 'float 15.315315315315' =>' string '15 .32'' – Yvan

2

Si desea redondear, necesitará usar floor(), que no tiene un medio para especificar la precisión, por lo que tiene que ser trabajado, por ej. con

function floor_prec($x, $prec) { 
    return floor($x*pow(10,$prec))/pow(10,$prec); 
} 
+0

¡Excelente! ¡Gracias! – arma

Cuestiones relacionadas