Целые Числа
Целые числа
integer это число из набора Z = {..., -2, -1, 0, 1, 2, ...}
См. также: Целые числа произвольного размера и Числа с плавающей точкой
Синтаксис
Целые числа могут специфицироваться в десятеричной (база 10), 16-ричной (база 16) или 8-ричной (база 8) нотации с необязательным знаком (- или +).
Если вы используете 8-ричную нотацию, первым символом числа должен быть 0 (нуль), для 16-ричной нотации первыми символами числа будут 0x.
Размер integer зависит от платформы, хотя максимальное значение около 2 миллионов является обычным (то есть 32-битное знаковое). PHP не поддерживает беззнаковые integer.
Переполнение
Если вы специфицируете число за рамками диапазона типа integer, оно будет интерпретировано как float. Также, если вы выполняете операцию, которая даёт в результате число за пределами диапазона типа integer, будет возвращено float.
$large_number = 2147483647; var_dump($large_number); // на выходе: int(2147483647) $large_number = 2147483648; var_dump($large_number); // на выходе: float(2147483648) // это подходит также для специфицированных 16-ричных чисел: var_dump( 0x80000000 ); // на выходе: float(2147483648) $million = 1000000; $large_number = 50000 * $million; var_dump($large_number); // на выходе: float(50000000000) |
Предупреждение! |
---|
К сожалению, в РНР был замечен bug, поэтому не всегда была корректна
работа с отрицательными числами. Например: если выполнить -50000 * $million, результат будет Это устранено в PHP 4.1.0. |
В PHP нет операции целочисленного деления. 1/2 даст float 0.5.
var_dump( 25/7 ); // на выходе: float(3.5714285714286) |
Конвертация в integer
Для явной конвертации значения в integer используйте приведение (int) или (integer). Однако в большинстве случаев вам нет необходимости использовать приведение/cast, поскольку значение будет конвертировано автоматически, если операция, функция или структура управления требует integer-аргумента.
См. также Трюки с типами.
Из boolean
FALSE даст 0 (нуль), а TRUE даст 1 (единицу).
Из float
При конвертации float в integer, число округляется в сторону нуля.
Если float выходит за диапазон integer (обычно это +/- 2.15e+9 = 2^31), результат будет неопределённым, поскольку float не имеет достаточной точности для выдачи точного integer-результата. В этом случае не будет выдано ни предупреждения, ни даже какого-либо уведомления!
Предупреждение! | |
---|---|
Никогда не приводите неизвестную дробь к integer, так как это может дать непредсказуемый результат.
См. дополнительно предупреждение о числах с плавающей точкой. |
Из string
Из других типов
Внимание! |
---|
Поведение при конвертации в integer для других типов не определено. В настоящее время поведение такое же, как если бы значение сначала было конвертировано в boolean. Однако не полагайтесь на это поведение, так как оно может быть изменено без предупреждения. |