(PHP 8 >= 8.4.0)
BcMath\Number::divmod — Renvoie le quotient et le modulo d'un nombre de précision arbitraire
Renvoie le quotient et le modulo de la division de $this par num
.
num
scale
scale
spécifié explicitement pour les résultats du calcul.
Si null
, le scale
du résultat du calcul sera défini automatiquement.
Renvoie un array indexé où le premier élément est le quotient sous forme d'un nouvel objet BcMath\Number et le second élément est le modulo sous forme d'un nouvel objet BcMath\Number.
Le quotient est toujours une valeur entière, donc BcMath\Number::scale du quotient sera
toujours 0
, indépendamment de si scale
est explicitement spécifié.
Si scale
est explicitement spécifié, BcMath\Number::scale du
modulo sera la valeur spécifiée.
Lorsque le BcMath\Number::scale de l'objet de modulo du résultat est défini automatiquement,
le plus grand BcMath\Number::scale des deux nombres utilisés pour l'opération de modulo est utilisé.
C'est-à-dire que si les BcMath\Number::scales de deux valeurs sont 2
et 5
respectivement, le BcMath\Number::scale du modulo
sera 5
.
Cette méthode lève une ValueError dans les cas suivants :
num
est un string et n'est pas une chaîne numérique BCMath bien forméescale
est en dehors de la plage valide
Cette méthode lève une DivisionByZeroError si
num
est 0
.
Exemple #1 Exemple de BcMath\Number::divmod() lorsque scale
n'est pas spécifié
<?php
echo '8.3 / 2.22' . PHP_EOL;
[$quot, $rem] = new BcMath\Number('8')->divmod(new BcMath\Number('2.22'));
var_dump($quot, $rem);
echo PHP_EOL . '8.3 / 8.3' . PHP_EOL;
[$quot, $rem] = new BcMath\Number('8.3')->divmod('8.3');
var_dump($quot, $rem);
echo PHP_EOL . '10 / -3' . PHP_EOL;
[$quot, $rem] = new BcMath\Number('10')->divmod(-3);
var_dump($quot, $rem);
?>
L'exemple ci-dessus va afficher :
8.3 / 2.22 object(BcMath\Number)#3 (2) { ["value"]=> string(1) "3" ["scale"]=> int(0) } object(BcMath\Number)#4 (2) { ["value"]=> string(4) "1.34" ["scale"]=> int(2) } 8.3 / 8.3 object(BcMath\Number)#2 (2) { ["value"]=> string(1) "1" ["scale"]=> int(0) } object(BcMath\Number)#5 (2) { ["value"]=> string(3) "0.0" ["scale"]=> int(1) } 10 / -3 object(BcMath\Number)#3 (2) { ["value"]=> string(2) "-3" ["scale"]=> int(0) } object(BcMath\Number)#1 (2) { ["value"]=> string(1) "1" ["scale"]=> int(0) }
Exemple #2 Exemple de BcMath\Number::divmod() an spécifiant scale
explicitement
<?php
echo '8.3 / 2.22' . PHP_EOL;
[$quot, $rem] = new BcMath\Number('8')->divmod(new BcMath\Number('2.22'), 1);
var_dump($quot, $rem);
echo PHP_EOL . '8.3 / 8.3' . PHP_EOL;
[$quot, $rem] = new BcMath\Number('8.3')->divmod('8.3', 4);
var_dump($quot, $rem);
echo PHP_EOL . '10 / -3' . PHP_EOL;
[$quot, $rem] = new BcMath\Number('10')->divmod(-3, 5);
var_dump($quot, $rem);
?>
L'exemple ci-dessus va afficher :
8.3 / 2.22 object(BcMath\Number)#3 (2) { ["value"]=> string(1) "3" ["scale"]=> int(0) } object(BcMath\Number)#4 (2) { ["value"]=> string(3) "1.3" ["scale"]=> int(1) } 8.3 / 8.3 object(BcMath\Number)#2 (2) { ["value"]=> string(1) "1" ["scale"]=> int(0) } object(BcMath\Number)#5 (2) { ["value"]=> string(6) "0.0000" ["scale"]=> int(4) } 10 / -3 object(BcMath\Number)#3 (2) { ["value"]=> string(2) "-3" ["scale"]=> int(0) } object(BcMath\Number)#1 (2) { ["value"]=> string(7) "1.00000" ["scale"]=> int(5) }