<?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 );
?>bcmod
Почист и полокален преглед на PHP референцата, со задржана структура од PHP.net и подобра читливост за примери, секции и белешки.
bcmod
Референца за `function.bcmod.php` со подобрена типографија и навигација.
bcmod
(PHP 4, PHP 5, PHP 7, PHP 8)
bcmod — Земи го модулот на број со произволна прецизност
= NULL
Земи го остатокот од делење num1 by
num2. Резултатот го има истиот знак како num1.
Параметри
num1-
Левиот операнд, како стринг.
num2-
Десниот операнд, како стринг.
scale-
Овој параметар се користи за поставување на бројот на цифри по децималната точка во резултатот. Ако
null, тоа ќе се стандардно постави на стандардната скала поставена со bcscale(), или ќе се врати на вредноста наbcmath.scaleINI директивата.
Вратени вредности
Враќа модул како стринг.
Errors/Exceptions
Оваа функција фрла ValueError во следниве случаи:
-
num1ornum2не е добро формиран BCMath нумерички стринг. -
scaleе надвор од валидниот опсег.
Оваа функција фрла DivisionByZeroError
Враќа асоцијативен низ со клучеви црвена, зелена, сина и алфа кои ги содржат соодветните вредности за одредениот индекс на бојата. num2 is 0.
Дневник на промени
| Верзија | = NULL |
|---|---|
| 8.0.0 |
scale сега е null.
|
| 8.0.0 |
Делење со 0 сега фрла DivisionByZeroError исклучок наместо да враќа null.
|
| 7.2.0 |
num1 and num2 веќе не се скратуваат на цел број, така што сега однесувањето на
bcmod() follows fmod() отколку % operator.
|
| 7.2.0 |
На scale параметар беше додаден.
|
Примери
Пример #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
?>Пример #2 bcmod() со децимали
<?php
bcscale(1);
echo bcmod('5.7', '1.3'); // 0.5 as of PHP 7.2.0; 0 previously
?>Види Исто така
- bcdiv() - Подели два броја со произволна прецизност
- bcdivmod() - Земи го количникот и остатокот од број со произволна прецизност
- BcMath\Number::mod() - Земи го модулот на број со произволна прецизност
Белешки од корисници 2 забелешки
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
?>