bcmod

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

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

Описание

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

Функция получает остаток от деления числа num1 на число num2. Результат получит тот же знак, что и у числа num1.

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

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.
7.2.0 Числа num1 и num2 больше не усекаются до целого, поэтому поведение функции bcmod() теперь соответствует функции fmod(), а не оператору %.
7.2.0 Добавили параметр scale.

Примеры

Пример #1 Пример получения остатка от деления функцией bcmod()

<?php

bcscale
(0);

echo
bcmod( '5', '3'); // 2
echo bcmod( '5', '-3'); // 2
echo bcmod('-5', '3'); // -2
echo bcmod('-5', '-3'); // -2

?>

Пример #2 Пример получения остатка от деления чисел с десятичными знаками функцией bcmod()

<?php

bcscale
(1);

echo
bcmod('5.7', '1.3'); // 0.5 с PHP 7.2.0; 0 ранее

?>

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

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

Добавить

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

up
4
lauris at night dot lt
21 years ago
<?php
/**
* my_bcmod - get modulus (substitute for bcmod)
* string my_bcmod ( string left_operand, int modulus )
* left_operand can be really big, but be carefull with modulus :(
* by Andrius Baranauskas and Laurynas Butkus :) Vilnius, Lithuania
**/
function my_bcmod( $x, $y )
{
// how many numbers to take at once? carefull not to exceed (int)
$take = 5;
$mod = '';

do
{
$a = (int)$mod.substr( $x, 0, $take );
$x = substr( $x, $take );
$mod = $a % $y;
}
while (
strlen($x) );

return (int)
$mod;
}

// example
echo my_bcmod( "7044060001970316212900", 150 );
?>
up
1
drahoszdenek at gmail dot com
12 years ago
The modulus can be only integer. For "floats" bcmod returns 0:

<?php
echo bcmod('10', '2.1'); // 0
?>

For real modulus you can use BN-PHP project (hosted at Bitbucket):

<?php
$eval
= new \BN\Expression\ExpressionEvaluator();
$operators = new \BN\Expression\OperatorsFactory();
$eval->setOperators($operators->getOperators(array('%')));

echo
$eval->evaluate('10 % 2.1'); // 1.6
echo $eval->evaluate('10 % -2.1'); // 1.6
echo $eval->evaluate('-10 % 2.1'); // -1.6
echo $eval->evaluate('-10 % -2.1'); // -1.6
?>
To Top