PHP 5.6.36 Released

bcmod

(PHP 4, PHP 5, PHP 7)

bcmodModulo zweier Zahlen mit beliebiger Genauigkeit

Beschreibung

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

Liefert den Modulo des dividend unter Verwendung von modulus.

Parameter-Liste

dividend

Der Dividend in Stringform.

modulus

Der Modulo-Wert in Stringform.

Rückgabewerte

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

Changelog

Version Beschreibung
7.2.0 dividend und modulus 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
echo bcmod('4''2'); // 0
echo bcmod('2''4'); // 2
?>

Siehe auch

  • bcdiv() - Division zweier Zahlen beliebiger Genauigkeit

add a note add a note

User Contributed Notes 2 notes

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