В таких языках, как 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()
есть функции, которые округляются по разному.Ответы:
используйте
round()
функцию, чтобы получить целое округленное значение.round(8 / 3); // 3
или же
Используйте
floor()
функцию для получения целочисленного значенияfloor(8 / 3); // 2
источник
floor()
вернетfloat
НЕ целое число, поэтому вы получите2.0
и нет2
. Приведите результат, чтобы убедиться, что вы получили целое число:(int)floor(8/3)
intdiv
), а Python усекает до отрицательной бесконечности.В PHP 7 есть функция intdiv, которая делает именно то, что вы хотите.
Применение:
intdiv(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)
Руководство по PHP
источник
использовать этот....
intval(1700000 / 300000 )...
это возвращает целочисленное значение.
источник
(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 попробуйте
intdiv()
функцию:<?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))
источник