# BcMath\Number::divmod

(PHP 8 >= 8.4.0)

BcMath\Number::divmod — Renvoie le quotient et le modulo d'un nombre de précision arbitraire

### Description

public BcMath\Number::divmod(BcMath\Number|string|int `$num`, ?int `$scale` = `null`): array

Renvoie le quotient et le modulo de la division de $this par `num`.

### Liste de paramètres

`num`
  Le diviseur.
`scale`
  BcMath\Number::scale spécifié explicitement pour les résultats du calcul. Si `null`, le BcMath\Number::scale du résultat du calcul sera défini automatiquement.

### Valeurs de retour

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`.

### Erreurs / Exceptions

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ée
- `scale` est en dehors de la plage valide

Cette méthode lève une DivisionByZeroError si `num` est `0`.

### Exemples

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)
    }

### Voir aussi

- bcdivmod() - Renvoie le quotient et le reste d'un nombre de précision arbitraire
- BcMath\Number::div() - Divise par un nombre de précision arbitraire
- BcMath\Number::mod() - Renvoie le modulo d'un nombre de précision arbitraire