SunshinePHP 2019

# bcmod

(PHP 4, PHP 5, PHP 7)

bcmodGet modulus of an arbitrary precision number

### Descrierea

string bcmod ( string \$dividend , string \$divisor [, int \$scale = 0 ] )

Get the remainder of dividing dividend by divisor. Unless divisor is zero, the result has the same sign as dividend.

### Parametri

dividend

The dividend, as a string.

divisor

The divisor, as a string.

### Valorile întoarse

Returns the modulus as a string, or NULL if divisor is 0.

### Istoricul schimbărilor

Versiune Descriere
7.2.0 dividend and divisor 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.

### Exemple

Example #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
?>

Example #2 bcmod() with decimals

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

### A se vedea și

• bcdiv() - Divide two arbitrary precision numbers

### User Contributed Notes 2 notes

lauris at night dot lt
14 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 );
?>
drahoszdenek at gmail dot com
5 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
?>