除以整数并得到整数值

Ism*_*leh 69 php

在像C或Python这样的语言中,如果我将整数除以整数,我得到一个整数:

>>> 8/3
2
Run Code Online (Sandbox Code Playgroud)

但是在PHP中,如果我将整数除以另一个整数/,有时我会得到一个浮点数:

php > var_dump(6/3);
int(2)
php > var_dump(8/3);
float(2.6666666666667)
Run Code Online (Sandbox Code Playgroud)

我想像Python或C那样进行划分,因此8/3是2.我怎样才能在PHP中做到这一点?

iLa*_* ツ 84

使用round()函数获取整数舍入值.

round(8 / 3); // 3
Run Code Online (Sandbox Code Playgroud)

要么

使用floor()函数获取整数值

floor(8 / 3); // 2
Run Code Online (Sandbox Code Playgroud)

  • 注意`floor()`将返回一个`float`而不是一个整数,所以你得到`2.0`而不是`2`.转换结果以确保得到一个整数:`(int)floor(8/3)` (10认同)
  • 不同意.楼层(-8/3)=== -3.0但应该是-2 (8认同)
  • @ByScripts *-8/3 = -3* 与 *-8/3 = -2* 一样是整数除法的有效方法。前者是“向负无穷截断”,后者是“向零截断”。两者都有优点,不同的语言选择不同的行为。例如,C 向零截断(PHP 7 的 `intdiv` 也是如此),而 Python 向负无穷大截断。 (2认同)

Mar*_*isý 57

在PHP 7中,有一个intdiv函数可以完全按照你的意愿执行.

用法:

intdiv(8, 3);
Run Code Online (Sandbox Code Playgroud)

退货2.

  • 这真的是一个很大的惊喜,这个功能只是用PHP 7引入:)哦,好吧,迟到总比没有好. (2认同)

S.P*_*.P. 20

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)     
Run Code Online (Sandbox Code Playgroud)

PhP手册


bip*_*pen 7

用这个....

intval(1700000 / 300000 )...
Run Code Online (Sandbox Code Playgroud)

这将返回整数值.


小智 6

(int)(1700000 / 300000);
Run Code Online (Sandbox Code Playgroud)

使用类型铸造.

  • 永远不要把浮动转换为int !!! <?php echo(int)((0.1 + 0.7)*10); ?>"7"!!! (4认同)
  • 噢!只因为(0.1 + 0.7)== 0.799999 ...而不是0.8 :) :) :) (4认同)
  • @ luc.chante你给出的例子是由于浮点错误.`(0.1 + 0.7)*10'的确切值是'7.99999999999999911182158029987476766109466552734375`.完全正确的是,`(int)`强制转换将此值截断为7.当将整数除以另一个整数时,如此问题和答案中的情况一样,此类浮点错误不能更改后截断结果. (3认同)

Bes*_*esi 6

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

8/3|0

  • -1; 这是对“按位或”运算符的令人困惑的滥用。诚然,它*有效*(因为按位运算符的操作数被转换为整数,这会将浮点值向下舍入,并且按位或与 0 的实际操作不会导致结果整数值发生变化),但为了让开发人员阅读此内容代码来理解“为什么”它有效,他们需要知道 PHP 按位运算符的转换行为(这是 99% 的 PHP 开发人员不会的晦涩琐碎知识),并且按位或带 0 会使值保持不变(不能保证) ,因为并非所有 Web 开发人员都了解位操作)。 (3认同)
  • 是的,它很令人困惑,因此不应在生产代码中使用,但它并没有改变它是解决该问题的一个有趣的解决方案的事实 (2认同)
  • JavaScript 中一直使用这种方法。程序员现在应该意识到这个技巧了...... (2认同)

Col*_*ett 6

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

<?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
Run Code Online (Sandbox Code Playgroud)

在 PHP 7 上,您可以使用它intdiv($p, $q)来直接执行整数除法。这相当于(int)($p / $q)在 PHP 5 上。


Aam*_*imi 6

对于 PHP 7 尝试intdiv()功能:

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

          <?php           
           $dividend = 19; 
           $divisor = 3;  
           echo intdiv($dividend, $divisor); 
           ?>
Run Code Online (Sandbox Code Playgroud)

对于旧版本的 PHP:

         <?php
     // Convert $total_minutes to hours and minutes.

         $total_minutes = 640;
         $minutes = $total_minutes % 60;
         $hours = ($total_minutes - $minutes) / 60;

         echo "Time taken was $hours hours $minutes minutes";
         ?>
Run Code Online (Sandbox Code Playgroud)