PHP Conference Nagoya 2025

bcdiv

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

bcdiv Делит два числа произвольной точности

Описание

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

Функция делит число num1 на число num2.

Список параметров

num1

Делимое в виде строки.

num2

Делитель в виде строки.

scale
Параметр устанавливает количество знаков после десятичного разделителя, которое вернётся в результате. При значении null количество знаков после десятичного разделителя равняется значению по умолчанию, которое установили для параметра глобально функцией bcscale(), или резервному значению, которое указали в INI-директиве bcmath.scale, если глобальное значение не установили.

Возвращаемые значения

Функция возвращает результат деления в виде строки.

Ошибки

Функция выбрасывает исключение ValueError в следующих случаях:

  • Значение аргумента num1 или num2 оказалось строкой, которую сформировали неправильно с точки зрения допустимого формата числовых строк в модуле BCMath.
  • Значение аргумента scale выходит за пределы допустимого диапазона.

Функция выбрасывает исключение DivisionByZeroError, если число num2 равно 0.

Список изменений

Версия Описание
8.0.0 Параметр scale теперь принимает значение null.
8.0.0 Деление на 0 теперь выбрасывает исключение DivisionByZeroError вместо возврата значения null.

Примеры

Пример #1 Пример деления чисел произвольной точности функцией bcdiv()

<?php

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

?>

Смотрите также

  • bcmul() - Умножает два числа произвольной точности

Добавить

Примечания пользователей 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