web-dev-qa-db-fra.com

Comment diviser les nombres sans reste en PHP?

Comment diviser les nombres mais exclure le reste en PHP?

43
eomeroff

Il suffit de convertir la valeur résultante en entier.

$n = (int) ($i / $m);

Les fonctions intéressantes (selon ce que vous voulez réaliser et si vous vous attendez à ce que les entiers négatifs soient divisés) sont floor() , ceil() et round() .

83
KingCrunch

PHP 7 a une nouvelle fonction intégrée pour ce nommé intdiv.

Exemple:

$result = intdiv(13, 2);

La valeur de $result dans cet exemple sera 6.

Vous pouvez trouver la documentation complète de cette fonction dans la documentation PHP .

9
Remco Beugels

Pour la plupart des raisons pratiques, la réponse acceptée est correcte.

Cependant, pour les versions où les entiers ont une largeur de 64 bits, toutes les valeurs d'entier possibles ne sont pas représentables sous la forme d'un flottant double précision; Voir mon commentaire sur la réponse acceptée pour plus de détails.

Une variation de

$n = ($i - $i % $m) / $m;

(le code tiré du commentaire de KingCrunch sous une autre réponse) évitera ce problème en fonction du comportement d'arrondi souhaité (gardez à l'esprit que le résultat de l'opérateur de module peut être négatif).

6
ralokt

En plus des décisions ci-dessus comme $result = intval($a / $b) il y a un cas particulier:

Si vous avez besoin d'une division entière (sans reste) par une puissance de deux ($b est 2 ^ N) vous pouvez utiliser l'opération de décalage à droite au niveau du bit:

$result = $a >> $N;

où $ N est un nombre compris entre 1 et 32 ​​sur le système d'exploitation 32 bits ou 64 pour les systèmes 64 bits.

Parfois, c'est utile parce que la décision la plus rapide pour le cas de $ b est une puissance de deux.

Et il y a une opération à l'envers (attention en raison du débordement!) pour multiplier par la puissance de deux:

$result = $a << $N;

J'espère que cela aide aussi quelqu'un.

0
FlameStorm