2010-05-15 37 views

Respuesta

18
floor() 

redondeará un número al número entero más cercano.

EDITAR: Como se señala en la siguiente tabla, esto solo funcionará para valores positivos, lo cual es una suposición importante. Para los valores negativos, querrá usar ceil() - pero verificar el signo del valor de entrada sería engorroso y, en su lugar, es probable que desee emplear la idea (int) cast de Mark o TechnoP. Espero que ayude.

+0

No estoy seguro de si esto se aplica a PHP, pero la transmisión (int) podría producir un desbordamiento ... Ah, http://stackoverflow.com/questions/300840/force-php-integer-overflow dice us: PHP max int es 2147483647. – osti

22
$y = 1.235251; 
$x = (int)$y; 
echo $x; //will echo "1" 

Editar: Uso de la conversión explícita a (int) es la forma más eficiente de este yo sepa. También el lanzamiento a (int) cortará los dígitos después del "." si el número es negativo en lugar de redondeo al siguiente número más bajo negativa:

echo (int)(-3.75); //echoes "-3"; 
echo floor(-3.75); //echoes "-4"; 
+2

el lanzamiento explícito es más rápido que floor() de hecho, sin embargo, cuando tales microoptimaciones son de su interés, entonces no debería usar PHP en primer lugar. –

+0

No estoy de acuerdo, si uso PHP, ya tengo una gran caída de rendimiento simplemente usando un lenguaje interpretado. Todavía es mi responsabilidad como desarrollador, no introducir más demoras innecesarias. También es un problema de memoria ya que floor() es una llamada a función y por eso requerirá memoria adicional. Dependiendo de la situación, el impacto en el rendimiento puede ser incluso bastante significativo. – selfawaresoup

2
$y = 1.234; 
list($y) = explode(".", "$y"); 
+2

Bueno, si quieres ganar un concurso de ofuscación, este sería el camino a seguir ... Divertido, pero mejor no uses esto de verdad ... – selfawaresoup

2

Si su entrada sólo puede ser positivo, entonces los flotadores como ya se mencionó obras de piso.

floor(1.2) 

Sin embargo, si su número entero también podría ser negativa, entonces baja no le puede dar lo que quiere: siempre redondea hacia abajo, incluso para los números negativos. En cambio, puedes convertir a int como otra publicación mencionada. Esto le dará el resultado correcto para los números negativos y positivos.

(int)-1.2 
+0

Incluso con una cadena, floor() funcionará porque PHPs dynamic escribiendo siempre que la cadena no contenga caracteres extraños además de los dígitos y un ".". Encender preg para esto solo conducirá a un rendimiento lento y una pérdida de memoria. – selfawaresoup

+0

@Techpriester: OK eliminado. Pero todavía creo que debes usar int, no floor si la entrada puede ser negativa. Nadie más ha considerado las contribuciones negativas todavía, lo que creo que es una pena porque el afiche no dijo que la entrada debe ser positiva. –

+0

@Mark: cierto. No pensé en eso.Publiqué (int) solo por razones de rendimiento :) – selfawaresoup

2

Puede utilizar un operador bit a bit.

Sin:

echo 49/3; 
>> 16.333333333333 

Con "| 0" bit a bit:

echo 49/3 | 0; 
>> 16 
Cuestiones relacionadas