2010-05-15 4 views

Répondre

18
floor() 

arrondira un nombre à l'entier le plus proche.

EDIT: Comme indiqué par Mark ci-dessous, cela ne fonctionnera que pour les valeurs positives, ce qui est une hypothèse importante. Pour les valeurs négatives, vous voudrez utiliser ceil() - mais vérifier le signe de la valeur d'entrée serait fastidieux et vous voudrez probablement utiliser l'idée (int) cast de Mark ou TechnoP à la place. J'espère que cela pourra aider.

+0

Je ne suis pas sûr si cela s'applique à PHP, mais (int) -cast pourrait donner un certain débordement ... Ah, http://stackoverflow.com/questions/300840/force-php-integer-overflow dit us: PHP max int est 2147483647. – osti

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

Edit: En utilisant la distribution explicite (int) est le moyen le plus efficace de ce AFAIK. La conversion à (int) coupera les chiffres après le "." si le nombre est négatif au lieu d'arrondir au nombre inférieur négatif:

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

le casting explicite est plus rapide que floor() en effet, cependant, lorsque de telles micro-optimisations sont de votre intérêt, alors vous ne devriez pas utiliser PHP en premier lieu. –

+0

Je ne suis pas d'accord, si j'utilise PHP, j'ai déjà une grosse baisse de performance en utilisant un langage interprété. Il est toujours de ma responsabilité en tant que développeur, de ne pas introduire plus de décalage inutile. C'est aussi un problème de mémoire puisque floor() est un appel de fonction et par conséquent nécessitera de la mémoire supplémentaire. Selon la situation, l'impact sur les performances peut même être assez important. – selfawaresoup

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

Eh bien, si vous voulez gagner un concours d'obfuscation, ce serait le chemin à parcourir ... Drôle, mais mieux vaut ne pas l'utiliser pour de vrai ... – selfawaresoup

2

Si votre entrée ne peut être flotteurs positifs alors comme déjà mentionné les travaux de sol.

floor(1.2) 

Toutefois, si votre entier pourrait aussi être négatif alors plancher ne peut pas vous donner ce que vous voulez: il arrondit toujours vers le bas, même pour les nombres négatifs. Au lieu de cela, vous pouvez utiliser int comme un autre message mentionné. Cela vous donnera le résultat correct pour les nombres négatifs et positifs.

(int)-1.2 
+0

Même avec une chaîne, floor() fonctionnera parce que les PPS dynamiques taper tant que la chaîne ne contient pas de caractères étranges en plus des chiffres et un ".". Firing up preg pour cela conduira juste à une performance lente et un gaspillage de mémoire. – selfawaresoup

+0

@Techpriester: OK supprimé. Mais je pense toujours que vous devriez utiliser int, pas le sol si l'entrée pourrait être négative. Personne d'autre n'a encore considéré les contributions négatives, ce que je trouve dommage car l'affiche n'a pas dit que l'entrée doit être positive. –

+0

@Mark: True. Je n'y ai pas pensé.J'ai posté (int) juste pour des raisons de performance :) – selfawaresoup

2

Vous pouvez utiliser un opérateur au niveau du bit.

Sans:

echo 49/3; 
>> 16.333333333333 

Avec "| 0" bitwise:

echo 49/3 | 0; 
>> 16 
Questions connexes