• 首页
  • vue
  • TypeScript
  • JavaScript
  • scss
  • css3
  • html5
  • php
  • MySQL
  • redis
  • jQuery
  • 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
    ?>
    

    上篇:bcdiv()

    下篇:bcmul()