PHP Conference Nagoya 2025

bcdiv

(PHP 4, PHP 5, PHP 7, PHP 8)

bcdivDivise deux nombres de grande taille

Description

bcdiv(string $num1, string $num2, ?int $scale = null): string

Divise l'opérande num1 par l'opérande num2.

Liste de paramètres

num1

Le dividende, sous la forme d'une chaîne de caractères.

num2

Le diviseur, sous la forme d'une chaîne de caractères.

scale
Ce paramètre est utilisé pour définir le nombre de chiffres après la virgule dans le résultat. Si null, il prendra par défaut la valeur définie par bcscale(), ou, à défaut, la valeur de la directive INI bcmath.scale.

Valeurs de retour

Retourne le résultat de la division, sous la forme d'une chaîne de caractères.

Erreurs / Exceptions

Cette fonction génère une exception ValueError dans les cas suivants :

  • num1 ou num2 n'est pas une chaîne numérique BCMath bien formée
  • scale est en dehors de la plage valide

Cette fonction génère une exception DivisionByZeroError si num2 est égal à 0.

Historique

Version Description
8.0.0 scale est désormais nullable.
8.0.0 Diviser par 0 génère désormais une exception DivisionByZeroError au lieu de renvoyer null.

Exemples

Exemple #1 Exemple avec bcdiv()

<?php

echo bcdiv('105', '6.55957', 3); // 16.007

?>

Voir aussi

  • bcmul() - Multiplie deux nombres de grande taille
  • bcdivmod() - Get the quotient and modulus of an arbitrary precision number
  • bcmod() - Retourne le reste d'une division entre nombres de grande taille

add a note

User Contributed Notes 1 note

up
0
MM
16 years ago
Perhaps some one can find useful this function to compute the modular inverse of a integer (extended euclidean algorithm):

function invmod($a,$b) {
$n=$b;
$x=0; $lx=1; $y=1; $ly=0;
while ($b) {
$t=$b;
$q=bcdiv($a,$b,0);
$b=bcmod($a,$b);
$a=$t;
$t=$x; $x=bcsub($lx,bcmod(bcmul($q,$x),$n)); $lx=$t;
$t=$y; $y=bcsub($ly,bcmod(bcmul($q,$y),$n)); $ly=$t;
}
if (bccomp($lx,0) == -1)
$lx=bcadd($lx,$n);
return $lx;
}

// verify

$n="2447995268898324993537772139997802321";
$t="64941057316178801556773346239351236811";
$m="123456789";
$i=invmod($t,$n);
// (t*m)*inv(t) is m
echo bcmod(bcmul(bcmod(bcmul($t,$m),$n),$i),$n) == $m;
To Top