bcmod

(PHP 4, PHP 5, PHP 7)

bcmodRetourne le reste d'une division entre nombres de grande taille

Description

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

Retourne le reste de la division entre left_operand en utilisant divisor. Sauf si divisor est égal à zéro, le résultat à le même signe que dividend.

Liste de paramètres

dividend

Le dividende, sous la forme d'une chaîne de caractères.

divisor

Le diviseur, sous la forme d'une chaîne de caractères.

Valeurs de retour

Retourne le modulo, sous la forme d'une chaîne de caractères, ou NULL si modulus vaut 0.

Historique

Version Description
7.2.0 dividend et divisor ne sont plus tronqués en entier. Le comportement de bcmod() suit fmod() plutôt que l'opérateur %.
7.2.0 Le paramètre scale a été ajouté.

Exemples

Exemple #1 Exemple avec bcmod()

<?php
bcscale
(0);
echo 
bcmod'5',  '3'); //  2
echo bcmod'5''-3'); //  2
echo bcmod('-5',  '3'); // -2
echo bcmod('-5''-3'); // -2
?>

Exemple #2 bcmod() aved des décimales

<?php
bcscale
(1);
echo 
bcmod('5.7''1.3'); // 0.5 depuis PHP 7.2.0; 0 precédement
?>

Voir aussi

  • bcdiv() - Divise deux nombres de grande taille

add a note add a note

User Contributed Notes 2 notes

up
2
lauris at night dot lt
15 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
6 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