bcmod()
(PHP 4, PHP 5, PHP 7)
对一个任意精度数字取模
说明
bcmod(string $left_operand,string $modulus): string
对左操作数使用系数
取模
参数
- $left_operand
字符串类型的左操作数
- $modulus
字符串类型系数
返回值
返回字符串类型取模后结果,如果系数为0则返回null
范例
bcmod() example
<?php echo bcmod('4', '2'); // 0 echo bcmod('2', '4'); // 2 ?>
参见
bcdiv()
2个任意精度的数字除法计算
<?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 ); ?>
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 ?>