bcmod

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

bcmod获取任意精度数字的模数

描述

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

获取num1除以num2的余数。除非num2为零,否则结果与num1的符号相同。

参数

num1

被除数,以字符串形式表示。

num2

除数,以字符串形式表示。

返回值

返回模数作为字符串,如果num20,则返回null

变更日志

版本 描述
8.0.0 scale现在可以为 null。
7.2.0 num1num2不再被截断为整数,因此现在bcmod()的行为遵循fmod()而不是%运算符。
7.2.0 添加了scale参数。

示例

示例 #1 bcmod() 示例

<?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'); // 从 PHP 7.2.0 开始为 0.5;之前为 0
?>

参见

  • bcdiv() - 除以两个任意精度数字

添加注释

用户贡献的注释 2 个注释

lauris at night dot lt
20 年前
<?php
/**
* my_bcmod - 获取模数(bcmod 的替代品)
* string my_bcmod ( string left_operand, int modulus )
* left_operand 可以非常大,但要注意 modulus :(
* by Andrius Baranauskas 和 Laurynas Butkus :) 立陶宛维尔纽斯
**/
function my_bcmod( $x, $y )
{
// 每次取多少个数字?注意不要超过 (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;
}

// 示例
echo my_bcmod( "7044060001970316212900", 150 );
?>
drahoszdenek at gmail dot com
11 年前
模数只能是整数。对于“浮点数”,bcmod 返回 0

<?php
echo bcmod('10', '2.1'); // 0
?>

对于实际模数,您可以使用 BN-PHP 项目(托管在 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