PHP 8.3.4 Released!

bcmod

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

bcmodModulo zweier Zahlen mit beliebiger Genauigkeit

Beschreibung

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

Liefert den Rest der Division von num1 durch num2. Solange num2 ungleich 0 ist, hat das Ergnis dasselbe Vorzeichen wie num1.

Parameter-Liste

num1

Der Dividend in Stringform.

num2

Der Divisor in Stringform.

Rückgabewerte

Gibt den Modulo als String zurück. Ist num2 0, wird null zurückgegeben.

Changelog

Version Beschreibung
8.0.0 scale ist jetzt nullbar.
7.2.0 num1 und num2 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

User Contributed Notes 2 notes

up
5
lauris at night dot lt
20 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
11 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