PHP 8.4.3 Released!

BcMath\Number::divmod

(PHP 8 >= 8.4.0)

BcMath\Number::divmodПолучает неполное частное и остаток от деления числа произвольной точности

Описание

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

Метод получает неполное частное и остаток от деления значения переменной $this на число num.

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

num
Делитель.

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

Метод возвращает индексный массив (array), в котором первый элемент — неполное частное в виде объекта BcMath\Number, а второй элемент — остаток от деления в виде нового объекта BcMath\Number.

Неполное частное — значение в виде целой части от деления, поэтому значение масштаба BcMath\Number::scale для частного остаётся равным 0, независимо от того, указали ли значение параметра scale явно.

Значение свойства BcMath\Number::scale в объекте с остатком от деления будет равняться значению аргумента scale, которое указали явно. При автоустановке в объекте с остатком от деления значения свойству BcMath\Number::scale метод установит свойству наибольшее значение масштаба BcMath\Number::scale из двух чисел, которые участвуют в операции операции взятия остатка.

Значение масштаба BcMath\Number::scale в остатке будет равняться 5, если значение свойства BcMath\Number::scale в одном операнде равняется 2, а в другом 5.

Ошибки

Метод выбрасывает ошибку ValueError в следующих случаях:

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

Метод выбрасывает ошибку DivisionByZeroError, если значение аргумента num равняется 0.

Примеры

Пример #1 Пример получения неполного частного и остатка от деления методом BcMath\Number::divmod() без указания значения для параметра scale

<?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);

?>

Результат выполнения приведённого примера:

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

Пример #2 Пример получения неполного частного и остатка от деления методом BcMath\Number::divmod() с явным значением для параметра scale

<?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);

?>

Результат выполнения приведённого примера:

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

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

  • bcdivmod() - Получает неполное частное и остаток от деления числа произвольной точности
  • BcMath\Number::div() - Делит числа произвольной точности
  • BcMath\Number::mod() - Получает остаток от деления числа произвольной точности
Добавить

Примечания пользователей

Пользователи ещё не добавляли примечания для страницы
To Top