SunshinePHP 2019 CFP Started

bcmod

(PHP 4, PHP 5, PHP 7)

bcmodModulo zweier Zahlen mit beliebiger Genauigkeit

Beschreibung

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

Liefert den Rest der Division von dividend durch modulus. Solange divisor ungleich 0 ist, hat das Ergnis dasselbe Vorzeichen wie dividend.

Parameter-Liste

dividend

Der Dividend in Stringform.

divisor

Der Divisor in Stringform.

Rückgabewerte

Gibt den Modulo als String zurück. Ist divisor 0, wird NULL zurückgegeben.

Changelog

Version Beschreibung
7.2.0 dividend und divisor werden nicht länger zu einer Ganzzahl abgeschnitten, so dass nun das Verhalten von bcmod() eher fmod() statt dem % Operator entspricht.
7.2.0 Der scale Parameter wurde hinzugefügt.

Beispiele

Beispiel #1 bcmod()-Beispiel

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

Beispiel #2 bcmod() mit Dezimalzahlen

<?php
bcscale
(1);
echo 
bcmod('5.7''1.3'); // 0.5 von PHP 7.2.0 an; 0 zuvor
?>

Siehe auch

  • bcdiv() - Division zweier Zahlen beliebiger Genauigkeit

add a note add a note

User Contributed Notes 2 notes

up
3
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 );
?>
up
2
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
?>
To Top