2011-03-01 40 views

Respuesta

49

PHP permite precisión negativo para round tal como con:

$x = round ($x, -3); // Uses default mode of PHP_ROUND_HALF_UP. 

Considerando una precisión positivo indica dónde redondear después de el punto decimal, precisiones negativos proporcionan la la misma potencia antes de el punto decimal. Por lo tanto:

n round(1111.1111,n) 
== ================== 
3 1111.111 
2 1111.11 
1 1111.1 
0 1111 
-1 1110 
-2 1100 
-3 1000 

como una solución general, incluso para idiomas que no lo tienen incorporado, sólo tiene que hacer algo como:

  • añadir 500.
  • divídalo por 1000 (y trunque al entero si es necesario).
  • multiplicar por 1000.

Esto es, por supuesto, asumiendo que usted quiere el comportamiento PHP_ROUND_HALF_UP. Hay algunos que piensan que redondear a los banqueros, PHP_ROUND_HALF_EVEN, es mejor para reducir los errores acumulativos, pero ese es un tema para una pregunta diferente.

+0

¿Agregar 499 o agregar 500? ¿No debería 500 redondear hasta 1000? – Mikel

+0

@Mikel: sí, mi error, corregido, gracias. – paxdiablo

4

Uso del round function como se ha mencionado en otras críticas round($number, -3).

También puede dividir su número por 1,000, redondear al número entero más cercano y luego multiplicar por 1,000.

Además, si desea redondear, puede dividir entre 1.000, anular el cociente, forzarlo a un número entero, negarlo de nuevo y luego multiplicarlo por 1.000.

3

Para enteros positivos:

function round($var) { 
    return ($var + 500)/1000 * 1000; 
} 
+4

No se puede redeclarar round() – Jacob

+3

OP pidió que se llame 'round()'. Si ya existe, llámalo de otra forma. ;-) – Mikel

2

Sólo para su información simple cálculo de Mikel answer es más rápido que round(): fuente

Test name  Repeats   Result   Performance  
calculation  10000   0.030229 sec +0.00% 
round   10000   0.040981 sec -35.57% 

prueba here.

2

¡Solo un pequeño cambio puede ayudar a redondear!

$x = ceil(220.20/1000) * 1000; 
echo $x; 
2

Aquí es una respuesta a redondear hasta la próxima mil:

abs(round(($a - 500), -3)) . "\n";

500-999 luego se redondea a 0 y 1000-1999 redonda a 1000, etc.

Si queremos que se inicia en 1000, a continuación, sólo hacer

abs(round(($a + 500), -3)) . "\n";

¡Salud!

Cuestiones relacionadas