©
This document uses PHP Chinese website manual Release
(PHP 4, PHP 5, PHP 7)
bcmod — 对一个任意精度数字取模
$left_operand
, string $modulus
)
对左操作数使用系数
取模
left_operand
字符串类型的左操作数
modulus
字符串类型系数
返回字符串类型取模后结果,如果系数为0则返回null
Example #1 bcmod() example
<?php
echo bcmod ( '4' , '2' ); // 0
echo bcmod ( '2' , '4' ); // 2
?>
[#1] drahoszdenek at gmail dot com [2013-02-01 16:44:23]
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
?>
[#2] admin at deosnet dot com [2012-12-20 14:59:54]
This function is also equivalent to :
<?php
echo 4%2; // 0
echo 2%4; // 2
?>
[#3] sebas at stageprikbord dot nl [2007-03-27 06:53:09]
function bc_is_even($int_str) {
return (int)!($int_str & 1);
}
More resource efficient version of 'bc_is_even'.
[#4] lauris at night dot lt [2003-12-23 08:04:35]
<?php
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 );
?>