bcmod

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

bcmodGet modulus of an arbitrary precision number

Опис

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

Get the remainder of dividing num1 by num2. The result has the same sign as num1.

Параметри

num1

The left operand, as a string.

num2

The right operand, as a string.

scale
This parameter is used to set the number of digits after the decimal place in the result. If null, it will default to the default scale set with bcscale(), or fallback to the value of the bcmath.scale INI directive.

Значення, що повертаються

Returns the modulus as a string.

_

_

This function throws a DivisionByZeroError exception if num2 is 0.

Журнал змін

Версія Опис
8.0.0 scale is now nullable.
8.0.0 Dividing by 0 now throws a DivisionByZeroError exception instead of returning null.
7.2.0 num1 and num2 are no longer truncated to integer, so now the behavior of bcmod() follows fmod() rather than the % operator.
7.2.0 The scale parameter was added.

Приклади

Приклад #1 bcmod() example

<?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() with decimals

<?php
bcscale
(1);
echo
bcmod('5.7', '1.3'); // 0.5 as of PHP 7.2.0; 0 previously
?>

Прогляньте також

  • bcdiv() - Divide two arbitrary precision numbers
  • bcdivmod() - Get the quotient and modulus of an arbitrary precision number
  • BcMath\Number::mod()

add a note

User Contributed Notes 2 notes

up
5
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