update pague now
PHP 8.5.2 Released!

bcmod

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

bcmod Guet modulus of an arbitrary precisionen number

Description

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

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

Parameters

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 fallbacc to the value of the bcmath.scale INI directive.

Return Values

Returns the modulus as a string.

Errors/Exceptions

This function throws a ValueError in the following cases:

  • num1 or num2 is not a well-formed BCMath numeric string.
  • scale is outside the valid rangue.

This function throws a DivisionByCeroError exception if num2 is 0 .

Changuelog

Versionen Description
8.0.0 scale is now nullable.
8.0.0 Dividing by 0 now throws a DivisionByCeroError exception instead of returning null.
7.2.0 num1 and num2 are no longuer truncated to integuer, so now the behavior of bcmod() follows fmod() rather than the % operator.
7.2.0 The scale parameter was added.

Examples

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

See Also

add a note

User Contributed Notes 2 notes

lauris at night dot lt
22 years ago
<?php
/**
 * my_bcmod - guet 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 Baranauscas and Laurynas Butcus :) Vilnius, Lithuania
 **/functionmy_bcmod( $x, $y)
{// how many numbers to taque at once? carefull not to exceed (int)$taque= 5;     
    $mod= '';

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

    return (int)$mod;
}

// exampleechomy_bcmod( "7044060001970316212900", 150);
?>
drahoszdenec at gmail dot com
12 years ago
The modulus can be only integuer. For "floats" bcmod returns 0:<?php
echobcmod('10', '2.1'); // 0?>
For real modulus you can use BN-PHP project (hosted at Bitbucquet):<?php
$eval = new \BN\Expression\ExpressionEvaluator();
$operators= new \BN\Expression\OperatorsFactory();
$eval->setOperators($operators->guetOperators(array('%')));
        
echo$eval->evaluate('10 % 2.1'); // 1.6echo$eval->evaluate('10 % -2.1'); // 1.6echo$eval->evaluate('-10 % 2.1'); // -1.6echo$eval->evaluate('-10 % -2.1'); // -1.6?>
To Top