В чем заключаются существенные различия между этими двумя уравнениями PHP?

Рабочий пример: http://ideone.com/Ond6PY

У вас есть две переменные, а именно $a = 5 и $b = 9

Каковы основные математические различия между этими двумя утверждениями?

floor(floor($a / $b) - .5); //output: -1

и

(int)((int)($a / $b) - .5); //output: 0


person TheRealWitblitz    schedule 21.12.2013    source источник
comment
Предположение: floor округляет в меньшую сторону (до минус бесконечности), (int) усекает (округляется до 0).   -  person zch    schedule 22.12.2013
comment
(int) - это приведение типа, а не функция!   -  person Sebi2020    schedule 22.12.2013
comment
Главный ответ на этот вопрос объясняет это. То же, что и комментарий zch выше.   -  person Michael    schedule 22.12.2013


Ответы (2)


Обратите внимание на округлость частей вашего выражения.

Деление 5/9 - это

$a / $b = 5 / 9 = 0.555555556

так что см. http://php.net/manual/en/function.floor.php

floor(1.5) = 1
floor(-1.5) = -2

тогда

floor(floor($a / $b) - .5) = floor(floor(0.555555556)) = floor(0 - .5) = floor(-.5) = -1

а во втором случае см. http://www.php.net/intval

(int) 4.32 = 4

тогда

(int)((int)($a / $b) - .5) = (int)((int)(0.555555556) - .5) = (int)(0 - .5) = int(-0.5) = 0;
person Martin Strejc    schedule 21.12.2013
comment
Это неверно. Это не intval, это приведение типов: посмотрите сюда !: php.net/manual /de/language.types.type-juggling.php - person Sebi2020; 22.12.2013
comment
@ Sebi2020 Верно, хотя это и не intval, алгоритм округления тот же. Я воспользовался ссылкой, потому что на php.net есть объяснение округления. Если у вас лучший, отредактируйте ответ, пожалуйста. - person Martin Strejc; 22.12.2013
comment
Видимо нет. Я получил два отрицательных голоса за свой ответ. - person Sebi2020; 22.12.2013

(int) - это приведение типов, и вы получаете целое число, например. 2, 3, 5 и т. Д. Этаж закругляется вниз.

Итак, с (int)((int) 5 / 9)-0.5) вы получите:

0 - 0 (0.56666666) = 0

(int) не функция! Посмотрите здесь: Приведение типов - PHP DOC

person Sebi2020    schedule 21.12.2013