International PHP Conference Berlin 2025

bcdiv

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

bcdivDivision zweier Zahlen beliebiger Genauigkeit

Beschreibung

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

Dividiert num1 durch num2.

Parameter-Liste

num1

Der Dividend als Zeichenkette.

num2

Der Divisor als Zeichenkette.

scale
Dieser Parameter wird verwendet, um die Anzahl der Nachkommastellen im Ergebnis festzulegen. Falls null, wird die mit bcscale() definierte Standard-Genauigkeit verwendet oder auf den Wert der INI-Direktive bcmath.scale zurückgegriffen.

Rückgabewerte

Gibt das Ergebnis der Division als Zeichenkette zurück.

Fehler/Exceptions

Diese Funktion löst in den folgenden Fällen einen ValueError aus:

  • num1 oder num2 ist keine wohlgeformte numerische BCMath-Zeichenkette.
  • scale liegt außerhalb des gültigen Bereichs.

Wenn num2 0 ist, löst diese Funktion eine DivisionByZeroError-Exception aus.

Changelog

Version Beschreibung
8.0.0 scale ist jetzt nullbar.
8.0.0 Die Division durch 0 löst nun eine DivisionByZeroError-Exception aus, anstatt null zurückzugeben.

Beispiele

Beispiel #1 bcdiv()-Beispiel

<?php

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

?>

Siehe auch

  • bcdivmod() - Get the quotient and modulus of an arbitrary precision number
  • bcmod() - Modulo zweier Zahlen mit beliebiger Genauigkeit
  • bcmul() - Multiplikation zweier Zahlen beliebiger Genauigkeit

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