Php 除以整数并得到整数值

Php 除以整数并得到整数值,php,Php,在C或Python等语言中,如果我将整数除以整数,则得到一个整数: >>> 8/3 2 <?php $pos = 1; $neg = -1; $divisor = 2; // No rounding (float division) var_dump($pos / $divisor); // 0.5 (float) var_dump($neg / $divisor); // -0.5 (float) // Round towar

在C或Python等语言中,如果我将整数除以整数,则得到一个整数:

>>> 8/3
2
<?php
$pos = 1;
$neg = -1;
$divisor = 2;

// No rounding (float division)
var_dump($pos / $divisor);          //  0.5 (float)
var_dump($neg / $divisor);          // -0.5 (float)

// Round toward zero (like C integer division)
var_dump((int)($pos / $divisor));   //  0 (int)
var_dump((int)($neg / $divisor));   //  0 (int)

// Round half away from zero
var_dump(round($pos / $divisor));   //  1 (float)
var_dump(round($neg / $divisor));   // -1 (float)

// Round down
var_dump(floor($pos / $divisor));   //  0 (float)
var_dump(floor($neg / $divisor));   // -1 (float)

# And on PHP 7 you can round toward zero with intdiv():
var_dump(intdiv($pos, $divisor));   //  0 (int)
var_dump(intdiv($neg, $divisor));   //  0 (int)  Rounded toward zero
但在PHP中,如果我用
/
将一个整数除以另一个整数,有时会得到一个浮点:

php > var_dump(6/3);
int(2)
php > var_dump(8/3);
float(2.6666666666667)
我想在Python或C中进行除法,这样8/3就是2。如何在PHP中实现这一点?

使用函数获取整数舍入值

round(8 / 3); // 3

使用函数获取整数值

floor(8 / 3); // 2

PHP中没有整数除法运算符。1/2表示浮点数为0.5。可以将该值强制转换为整数以向下舍入,也可以使用round()函数对舍入进行更好的控制


var_dump(25/7);           // float(3.5714285714286)    
var_dump((int) (25/7));   // int(3)   
var_dump(round(25/7));    // float(4)     
使用这个

intval(1700000 / 300000 )...
这将返回整数值

(int)(1700000 / 300000);
使用类型转换。

在PHP7中,有一个函数正是您想要的

用法:

intdiv(8, 3);

返回
2

您可以通过在末尾添加| 0来使用缩写形式


8/3 | 0

在PHP中有几种执行整数除法的方法。该语言没有整数除法的运算符,但有几个选项可以将浮点商舍入为整数:

>>> 8/3
2
<?php
$pos = 1;
$neg = -1;
$divisor = 2;

// No rounding (float division)
var_dump($pos / $divisor);          //  0.5 (float)
var_dump($neg / $divisor);          // -0.5 (float)

// Round toward zero (like C integer division)
var_dump((int)($pos / $divisor));   //  0 (int)
var_dump((int)($neg / $divisor));   //  0 (int)

// Round half away from zero
var_dump(round($pos / $divisor));   //  1 (float)
var_dump(round($neg / $divisor));   // -1 (float)

// Round down
var_dump(floor($pos / $divisor));   //  0 (float)
var_dump(floor($neg / $divisor));   // -1 (float)

# And on PHP 7 you can round toward zero with intdiv():
var_dump(intdiv($pos, $divisor));   //  0 (int)
var_dump(intdiv($neg, $divisor));   //  0 (int)  Rounded toward zero

PHP版本7的
intdiv(a,b)

对于小于7的版本(如5.6)=>
(int)floor(abs(a/b))
对于PHP7,请尝试
intdiv()
函数:

语法:
intintdiv($divident,$divisor)


对于旧版本的PHP:



可能重复如果您对上述内容进行四舍五入,您将得到
6
,您需要5或6什么?@Starx:有多个四舍五入类型:。因此,如果你在5.6轮-你不知道你得到了什么(没有指定你希望它如何被四舍五入)@zerkms,是的,像
ceil()
floor()
这样的函数确实是不同的函数。哇!只是因为(0.1+0.7)==0.799999。。。您给出的示例不是0.8:):):@luc.chante,而是由于浮点错误。
(0.1+0.7)*10的精确值为
7.999999999111821580987476766109466552734375
。一个
(int)
强制转换将该值截断为7是完全正确的。当将一个整数除以另一个整数时,就像这里的问答一样,这样的浮点错误不能改变后截断结果。这再现了C/C++在进行整数除法时所期望的准确行为,因此我认为根本没有问题。不同意。floor(-8/3)=-3.0,但应该是-2注意
floor()
将返回一个
float
而不是整数,因此得到
2.0
而不是
2
。强制转换结果以确保获得整数:
(int)floor(8/3)
@ByScripts-8/3=-3对于整数除法来说与-8/3=-2一样有效。前者是“向负无穷远截断”,后者是“向零截断”。两者都有优势,不同的语言选择不同的行为。例如,C向零截断(PHP7的
intdiv
),而Python向负无穷大截断;这是对“按位或”运算符的混乱滥用。诚然,它是有效的(因为按位运算符的操作数被强制转换为整数,这会向下舍入浮点值,按位或与0的实际操作不会导致对结果整数值的更改),但为了让阅读此代码的开发人员理解其工作原理,他们需要了解PHP按位运算符的强制转换行为(这是99%的PHP开发人员所不具备的晦涩琐事知识)并且按位or和0保持值不变(不保证,因为并非所有web开发人员都理解位操作)@MarkAmery,mos开发人员不知道这一点并不意味着它不起作用。显然,这是一个提升投票率的好理由,因此人们会学习如何使用它。是的,它令人困惑,因此不应该在生产代码中使用,但它并没有改变这一事实,即它是一个有趣的解决方案problem@TomaszSwider有些人ight也会搜索最短的解决方案(特别是在一些代码挑战中)。JavaScript中一直使用这个方法。程序员现在应该知道这个技巧了……这真是一个巨大的惊喜,这个函数只在PHP 7中引入:)哦,好吧,迟做总比不做好。在PHP5.6中有这样的解决方案吗?没有。在PHP5.6中,使用公认的答案:)不适用于大整数。截至2019年8月,这是唯一正确的答案。