API Platform Conference 2025

BcMath\Number::divmod

(PHP 8 >= 8.4.0)

BcMath\Number::divmodRenvoie 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
scale spécifié explicitement pour les résultats du calcul. Si null, le 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

add a note

User Contributed Notes

There are no user contributed notes for this page.
To Top