• 首页
  • vue
  • TypeScript
  • JavaScript
  • scss
  • css3
  • html5
  • php
  • MySQL
  • redis
  • jQuery
  • intdiv()

    版本:php7

    (PHP 7)

    对除法结果取整

    说明

    intdiv(int $dividend,int $divisor): int

    返回$dividend除以$divisor商数的整数部分。

    参数

    $dividend

    被除数。

    $divisor

    除数。

    返回值

    $dividend除以$divisor的商,对该商取整。

    错误/异常

    如果$divisor0,将抛出DivisionByZeroError异常。如果$dividendPHP_INT_MIN并且$divisor-1,将抛出ArithmeticError异常.

    范例

    Example #1intdiv()的一些例子

    <?php
    var_dump(intdiv(3, 2));
    var_dump(intdiv(-3, 2));
    var_dump(intdiv(3, -2));
    var_dump(intdiv(-3, -2));
    var_dump(intdiv(PHP_INT_MAX, PHP_INT_MAX));
    var_dump(intdiv(PHP_INT_MIN, PHP_INT_MIN));
    var_dump(intdiv(PHP_INT_MIN, -1));
    var_dump(intdiv(1, 0));
    ?>
    
    int(1)
    int(-1)
    int(-1)
    int(1)
    int(1)
    int(1)
    Fatal error: Uncaught ArithmeticError: Division of PHP_INT_MIN by -1 is not an integer in %s on line 8
    Fatal error: Uncaught DivisionByZeroError: Division by zero in %s on line 9
    
    This does indeed seem to be equal to intdiv:
    <?php
    function intdiv_1($a, $b){
      return ($a - $a % $b) / $b;
    }
    ?>
    However, this isn't:
    <?php
    function intdiv_2($a, $b){
      return floor($a / $b);
    }
    ?>
    Consider an example where either of the parameters is negative:
    <?php
    $param1 = -10;
    $param2 = 3;
    print_r([
      'modulus' => intdiv_1($param1, $param2),
      'floor' => intdiv_2($param1, $param2),
    ]);
    /**
     * Array
     * (
     *   [modulus] => -3
     *   [floor] => -4
     * )
     */
    ?>
    
    @AmeenRoss 
    This does NOT seem to be equal to intdiv:
    <?php
    function intdiv_1($a, $b){
      return ($a - $a % $b) / $b;
    }
     ?>
    See this example code
    <?php 
    $x = 5.6;
    $y = 1.4 ;
    echo intdiv($x,$y);
      
      echo "\n";
      
    function intdiv_1($a, $b){
      return ($a - $a % $b) / $b;
    }  
    echo intdiv_1($x,$y);
    ?>
    //Output
    5
    4
    For earler versions PHP you may use:
    function intdiv_1($a, $b) {
      $a = (int) $a;
      $b = (int) $b;
      return ($a - fmod($a, $b)) / $b;
    }
    Without intdiv(), the following may be a good way (with $a and $b of type integer and not too big) :
    <?php
    (int)($a / $b)
    ?>
    because in case of divisible integers, the result will be integer and there is no risk of float appearing round but below their represented value (like the case (0.1+0.7)*10).
    $a and $b really needs to be of type integer though. 
    If they are too big and indivisible, some precision will be lost during the conversion to float and the result may be inaccurate.
    $a = 57;
    $b = 3;
    var_dump(
      intdiv($a,$b),
      intdiv_1($a,$b),
      intdiv_2($a,$b)
    );
    function intdiv_1($a, $b){
      return ($a-$a%$b)/$b;
    }
    function intdiv_2($a, $b){
      return floor($a/$b);
    }
    //intdiv($a, $b) == floor($a/$b) == ($a-$a%$b)/$b
    <?php
    function intdiv_2($a, $b) {
      $val = $a / $b;
      return ($val < 0 ? "ceil" : "floor") ($val);
    } 
    ?>
    Aren't this?!

    上篇:hypot()

    下篇:is_finite()