Типы целое число php

PHP — Целые числа (Integer)

Int — это число из множества ℤ = <. -2, -1, 0, 1, 2, . >.

int может быть указан в десятичной (по основанию 10), шестнадцатеричной (по основанию 16), восьмеричной (по основанию 8) или двоичной (по основанию 2) записи. Оператор отрицания может использоваться для обозначения отрицательного целого числа .

Чтобы использовать восьмеричное представление, поставьте перед числом 0 (ноль). Начиная с PHP 8.1.0, восьмеричной записи также может предшествовать 0o или 0O . Для использования шестнадцатеричной системы счисления перед числом ставится 0x . Чтобы использовать двоичную запись, перед номером ставится 0b .

Начиная с PHP 7.4.0, целочисленные литералы могут содержать знаки подчеркивания ( _ ) между цифрами для лучшей читаемости литералов. Эти символы подчеркивания удаляются сканером PHP.

Пример #1 Целочисленные литералы

Формально структура для литералов int такая же, как и в PHP 7.4.0 (ранее символы подчеркивания не допускались):

десятичный: 41*(_8+)* | 0 шестнадцатеричный: 0[xX][0-9a-fA-F]+(_[0-9a-fA-F]+)* восьмеричное: 0[oO]?5+(_2+)* двоичный: 0[bB][01]+(_[01]+)* целое: десятичное | шестнадцатеричный | восьмеричный | бинарный

Размер int зависит от платформы, хотя максимальное значение около двух миллиардов является обычным значением (это 32 бита со знаком). 64-битные платформы обычно имеют максимальное значение около 9E18. PHP не поддерживает беззнаковые целые числа. размер int можно определить с помощью константы PHP_INT_SIZE , максимальное значение с помощью константы PHP_INT_MAX и минимальное значение с помощью константы PHP_INT_MIN .

Читайте также:  Изменение цвета текста

Целочисленное переполнение

Если PHP встретит число, выходящее за пределы типа int , оно будет интерпретировано как число с плавающей запятой . Кроме того, операция, результатом которой является число, выходящее за пределы типа int , вместо этого вернет число с плавающей запятой .

Пример #2 Целочисленное переполнение в 32-битной системе

Пример #3 Целочисленное переполнение в 64-битной системе

В PHP нет оператора деления int , для этого используйте функцию intdiv() . 1/2 дает поплавок 0.5 . Значение может быть приведено к типу int , чтобы округлить его до нуля, или функция round() обеспечивает более точное управление округлением.

Преобразование в целое число

Чтобы явно преобразовать значение в int , используйте приведение типов (int) или (integer) . Однако в большинстве случаев приведение не требуется, поскольку значение будет автоматически преобразовано, если оператору, функции или управляющей структуре требуется аргумент типа int . Значение также можно преобразовать в int с помощью функции intval() .

Если ресурс преобразуется в int , результатом будет уникальный номер ресурса, присвоенный ресурсу PHP во время выполнения.

Из логических значений

false даст 0 (ноль) и true даст 1 (один).

Из чисел с плавающей запятой

При преобразовании из float в int число будет округлено до нуля .

Если число с плавающей запятой выходит за пределы int (обычно +/- 2.15e+9 = 2^31 на 32-разрядных платформах и +/- 9.22e+18 = 2^63 на 64-разрядных платформах), результат не определен, поскольку точность числа с плавающей запятой недостаточна для получения точного результата типа int . Никакого предупреждения, даже уведомления не будет, когда это произойдет!

Примечание :

NaN и Infinity всегда будут равны нулю при приведении к int .

Предупреждение

Никогда не приводите неизвестную дробь к типу int , так как иногда это может привести к неожиданным результатам.

Из строк

Если строка является числовой или ведущей цифрой, она будет преобразована в соответствующее целочисленное значение, в противном случае она будет преобразована в ноль ( 0 ).

От NULL

null всегда преобразуется в ноль ( 0 ).

Из других типов

Осторожность

Поведение преобразования в int не определено для других типов. Не полагайтесь на какое-либо наблюдаемое поведение, поскольку оно может измениться без предварительного уведомления.

Источник

Различные типы чисел в PHP

Работая с числамт следует отметить, что PHP обеспечивает автоматическое преобразование типов данных. Например, если вы присвоите переменной целочисленное значение, тип этой переменной автоматически будет целым числом. На следующей строке кода вы можете назначить строку той же переменной и её тип изменится на строку. Это автоматическое преобразование иногда может нарушить ваш код.

Целые числа PHP

Самый простой тип числа в PHP — это целое число. Как вы уже знаете, целое число — это число без десятичной части. Например, 7 представляет собой целое число, а также 10358 или -10358. С другой стороны, 10.0 и 5.58 — это числа с плавающей точкой.

Таким образом, целое число — это недесятичное число от -2147483648 до 2147483647. Значение больше (или меньше), чем этот целочисленный интервал, будет сохранено как float , потому что оно превышает предел целого числа.

Еще одна особенность чисел, которую нужно знать, это то, что даже если 4 * 2.5 равно 10 , результат сохраняется как float , потому что один из операндов — float (2.5) .

Основные правила определения целого числа:

  • должно содержать хотя бы одну цифру;
  • не должно иметь десятичной точки;
  • может быть положительным или отрицательным;
  • может быть указано в трех форматах: десятичном (основание 10), шестнадцатеричном (основание 16 — с префиксом 0x) или восьмеричном (основание 8 — с префиксом 0).

Функции PHP для проверки целочисленного типа переменной:

  • is_int() – проверяет, является ли значение целым числом
  • is_int() – псевдоним is_int()
  • is_int() – псевдоним is_int()

Проверим, является ли тип переменной целым числом:

Пример

 $x = 7775; 
var_dump(is_int($x)); // выведет bool(true)

$x = 77.85;
var_dump(is_int($x)); // выведет bool(false)
?>

Результат выполнения кода:

Число с плавающей точкой

В отличие от целых чисел ряд типов float может быть представлен различными способами. Значения 4.54 , 7.0 , 3.87E+10 и 4.56E-5 — все это числа с плавающей точкой.

PHP автоматически преобразует число в тип float , когда используются десятичные или очень большие числа. Тип float обычно может хранить числа с величиной до 1.7976931348623E+308 (зависит от платформы) и иметь максимальную точность 14 цифр.

В PHP есть следующие функции для проверки того, является ли переменная типом float :

Так как is_double() является просто псевдонимом is_float() , вы можете использовать любую из них и получить тот же результат:

Пример

 $x = 10.365; 
var_dump(is_float($x)); // выведет bool(true)

$x = 77.85;
var_dump(is_double($x)); // выведет bool(true)
?>

Результат выполнения кода:

PHP Бесконечность

В PHP любое числовое значение выше PHP_FLOAT_MAX на платформе считается бесконечным.

Вы можете проверить, является ли числовое значение конечным или бесконечным, используя функции is_finite() и is_infinite() .

Функция PHP var_dump() возвращает тип данных и значение:

Пример

 $x = 3.14e411; 
var_dump($x); // выведет float(INF)
?>

Результат выполнения кода:

Специальное значение NAN

Некоторые функции при работе с числами могут возвращать специальное значение NAN . Значение NAN является сокращением от Not a Number (не число). Данное значение означает, что какая-то используемая математическая функция вышла за пределы допустимого диапазона значений в операциях с плавающей точкой или не смогла обработать свои входные данные. Например, log(-1) будет NAN . Аналогично, acos(5) также будет NAN . Вы можете проверить, не является ли значение, возвращаемое математической операцией, не числом, используя функцию is_nan() .

Функция PHP var_dump() возвращает тип данных и значение:

Пример

 $x = acos(5); 
var_dump($x); // выведет float(NAN)
?>

Результат выполнения кода:

Числовые строки в PHP

Функцию is_numeric() можно использовать для определения, действительно ли строка или переменная является числовой или нет. Эта функция вернет true для чисел, записанных в восьмеричной, двоичной или шестнадцатеричной нотации. Она также вернет true , если числа записаны в экспоненциальном виде, например, +19.42e49 .

PHP будет неявно использовать любую действительную числовую строку для числа, когда возникнет необходимость. Следующие примеры помогут вам лучше понять этот процесс:

Пример

 $x = 3985; 
var_dump(is_numeric($x));

$x = "3985";
var_dump(is_numeric($x));

$x = "39.85" + 100;
var_dump(is_numeric($x));

$x = 0xfedd24;
var_dump(is_numeric($x));

$x ="0xfedd24";
var_dump(is_numeric($x));

$x = "Привет мир";
var_dump(is_numeric($x));
?>

Результат выполнения кода:

Как вы можете видеть, вся действительная числовая строка была преобразована в их соответствующие значения перед добавлением или другими операциями. Тип переменной $x в результате зависит от её конечного значения.

В предпоследнем случае шестнадцатеричная строка «0xfedd24» не преобразуется в ее десятичное значение потому, что PHP 7 не считает ее допустимой числовой строкой.

Примечание: Примечание: Начиная с PHP 7.0 функция is_numeric() возвращает значение FALSE для числовых строк в шестнадцатеричной форме (например, «0xfedd24» ), поскольку они больше не считаются числовыми строками.

Приведение строк и чисел с плавающей точкой к целым числам

Иногда вам будет нужно преобразовать числовое значение в другой тип данных. В PHP имеется множество функций и методов для этих целей. В большинстве случаев приведение будет выполнено неявно и вам не придется беспокоиться об этом. Но, если вам нужно сделать преобразование, используйте методы, приведенные ниже.

Для преобразования любого значения в целое число вы можете использовать функции (int) или (integer) . В случае float значения всегда будут округлены до нуля. Другой способ преобразовать строки и float в целые числа применить функцию intval() . Обе функции (int) и intval() работают одинаково.

Пример

 // Привести float к int 
$x = 77465.768;
$int_cast = (int)$x;
echo $int_cast; echo "
";

// Привести строку к int
$x = "77465.768";
$int_cast = (int)$x;
echo $int_cast;
?>

Результат выполнения кода:

Источник

Целые числа

Целые числа могут специфицироваться в десятеричной (база 10), 16-ричной (база 16) или 8-ричной (база 8) нотации с необязательным знаком (- или +).

Если вы используете 8-ричную нотацию, первым символом числа должен быть 0 (нуль), для 16-ричной нотации первыми символами числа будут 0x.

Пример 6-1. Целочисленные литералы

$a = 1234; # 10-ричное число $a = -123; # отрицательное число $a = 0123; # 8-ричное число (экивалентно 10-ричному 83) $a = 0x1A; # hexadecimal number (экивалентно 10-ричному 26)

Размер integer зависит от платформы, хотя максимальное значение около 2 миллионов является обычным (то есть 32-битное знаковое). PHP не поддерживает беззнаковые integers.

Переполнение

Если вы специфицируете число за рамками диапазона типа 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, результат будет
-429496728. Однако, когда оба операнда — положительные, проблем не возникает.

В 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 в integer, число округляется в сторону нуля.

Если float выходит за диапазон integer (обычно это +/- 2.15e+9 = 2^31), результат будет неопределённым, поскольку float не имеет достаточной точности для выдачи точного integer-результата. В этом случае не будет выдано ни предупреждения, ни даже какого-либо уведомления!

Предупреждение! Никогда не приводите неизвестную дробь к integer, так как это может дать непредсказуемый результат.

echo (int) ( (0.1+0.7) * 10 ); // выведет 7!

Из string

Из других типов

Предупреждение! Поведение при конвертации в integer для других типов не определено. В настоящее время поведение такое же, как если бы значение сначала было конвертировано в boolean. Однако не полагайтесь на это поведение, так как оно может быть изменено без предупреждения.

Источник

Оцените статью