在C或Python之类的语言中,如果将整数除以整数,则会得到一个整数:
>>> 8/3
2
但是在PHP中,如果我使用将一个整数除以另一个整数/,有时会得到一个浮点数:
php > var_dump(6/3);
int(2)
php > var_dump(8/3);
float(2.6666666666667)
我想像Python或C这样进行除法,所以8/3是2。如何在PHP中做到这一点?
在C或Python之类的语言中,如果将整数除以整数,则会得到一个整数:
>>> 8/3
2
但是在PHP中,如果我使用将一个整数除以另一个整数/,有时会得到一个浮点数:
php > var_dump(6/3);
int(2)
php > var_dump(8/3);
float(2.6666666666667)
我想像Python或C这样进行除法,所以8/3是2。如何在PHP中做到这一点?
6,您需要5还是6?
ceil(),floor()其功能确实与相似,并且其舍入功能不同。
Answers:
floor()将返回一个floatNOT整数,因此您得到2.0and not 2。强制转换结果以确保您获得整数:(int)floor(8/3)
intdiv截断),而Python截断为负无穷大。
(int)(1700000 / 300000);
使用类型转换。
(0.1 + 0.7) * 10是7.99999999999999911182158029987476766109466552734375。(int)强制转换将这个值截断为7是完全正确的。在将整数除以另一个整数时(如此处的问答),这种浮点错误不能更改截断后的结果。
有几种方法可以在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
在PHP 7上,您可以intdiv($p, $q)用来直接执行整数除法。这等效(int)($p / $q)于PHP 5。
您可以在末尾加| 0来使用简写形式
8/3 | 0
对于PHP 7 tryintdiv()函数:
句法:
int intdiv($dividend, $divisor)
<?php
$dividend = 19;
$divisor = 3;
echo intdiv($dividend, $divisor);
?>
对于旧版本的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";
?>
对于PHP版本7 => intdiv(a,b)
对于小于7(例如5.6)的版本=> (int)floor(abs(a/b))