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

# BcMath\Number::divmod

(PHP 8 >= 8.4.0)

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

### Описание

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

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

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

`num`
  Делитель.
`scale`
  Свойство BcMath\Number::scale явно указывает значение масштаба в результате расчёта. Со значением `null` для свойства BcMath\Number::scale метод автоматически установит масштаб в результате расчёта.

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

Метод возвращает индексный массив (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() - Получает остаток от деления числа произвольной точности

`↑` and `↓` to navigate • `Enter` to select • `Esc` to close • `/` to open