PHP 中的取余数操作

这个细节一直没有注意,今天补上。

一般我们取余操作都是直接用”%”这个操作符来完成,但是这个操作符受到运行环境的限制,被余数不能超过PHP_INT_MAX,所以官方提供了bcmod这个函数来对任意数进行取余数操作。

运行下面的代码,可以看到效果。

/**
* 这个在官方评论中找到的一个对任意数取余的函数实现(看了下是10年写下的)
* 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
$a = "7044060001970316212900";
$b = 150;
echo my_bcmod($a, $b ).PHP_EOL;
echo bcmod($a, $b).PHP_EOL;
echo $a % $b;

发表评论

电子邮件地址不会被公开。 必填项已用*标注