PHP Conference Japan 2024

intdiv

(PHP 7, PHP 8)

intdiv整数除法

描述

intdiv(int $num1, int $num2): int

返回num1除以num2的整数商。

参数

num1

被除数。

num2

除数。

返回值

num1除以num2的整数商。

错误/异常

如果num20,则抛出DivisionByZeroError异常。如果num1PHP_INT_MINnum2-1,则抛出ArithmeticError异常。

示例

示例 #1 intdiv() 示例

<?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

参见

  • / - 浮点除法
  • % - 整数模
  • fmod() - 返回参数除法的浮点余数(模) - 浮点模

添加笔记

用户贡献笔记 3 条笔记

AmeenRoss
9 年前
这确实似乎等于 intdiv

<?php
function intdiv_1($a, $b){
return (
$a - $a % $b) / $b;
}
?>

但是,这不是

<?php
function intdiv_2($a, $b){
return
floor($a / $b);
}
?>

考虑一个参数为负数的例子
<?php
$param1 = -10;
$param2 = 3;
print_r([
'modulus' => intdiv_1($param1, $param2),
'floor' => intdiv_2($param1, $param2),
]);

/**
* 数组
* (
* [modulus] => -3
* [floor] => -4
* )
*/
?>
oittaa
2年前
Python 风格的整数除法,结果总是向负无穷大舍入。

1 // 2 为 0
(-1) // 2 为 -1
1 // (-2) 为 -1
(-1) // (-2) 为 0

<?php
function intdiv_py(int $num1, int $num2): int{
if (
$num1 < 0 xor $num2 < 0){
$num1 = abs($num1);
$num2 = abs($num2);
$remainder = $num1 % $num2;
return
$remainder ? -1 -($num1 - $remainder) / $num2 : -$num1 / $num2;
}
return
intdiv($num1, $num2);
}

var_dump(intdiv_py(1, 2)); // 0
var_dump(intdiv_py(-1, 2)); // -1
var_dump(intdiv_py(1, -2)); // -1
var_dump(intdiv_py(-1, -2)); // 0
?>
sree dot millu at gmail dot com
5年前
@AmeenRoss
这似乎并不等于 intdiv

<?php
function intdiv_1($a, $b){
return (
$a - $a % $b) / $b;
}
?>

参见此示例代码
<?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);
?>

//输出
5
4
To Top