Php 除以整数并得到整数值
在C或Python等语言中,如果我将整数除以整数,则得到一个整数: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
>>> 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月,这是唯一正确的答案。