Продолжим рассматривать php преобразует различные типы данных к строковому виду. Первая часть здесь.
Рассмотрим тип данных
Числа, превышающие размер типа
Для того чтобы вывести
Переходим к выводу переменных типа
Как видим - числа выводятся с тем же количеством знаков после запятой, что были указаны при их объявлении. Для указания нужного числа знаков после запятой - пользуйтесь функциями форматирования, например, теми же
Оставшиеся типы данных -
Рассмотрим тип данных
int
. Переменная типа int
может быть задана в четырех системах счисления: десятичной, восьмеричной, шестнадцатеричной и двоичной. Независимо от системы счисления, вывод будет преобразован к десятичной системе счисления:
$a = 0;
$b = 42;
$c = 0b101011; // 43 в десятичной
$d = 054; // 44 в десятичной
$e = 0x2D; // 45 в десятичной
$f = -42;
echo $a . PHP_EOL;
echo $b . PHP_EOL;
echo $c . PHP_EOL;
echo $d . PHP_EOL;
echo $e . PHP_EOL;
echo $f . PHP_EOL;
// вывод:
0
42
43
44
45
-42
Числа, превышающие размер типа
int
(PHP_INT_MAX
/ PHP_INT_MIN
), автоматически конвертируются в тип float
и выводятся соответствующе:
$a = PHP_INT_MAX;
$b = 2 + PHP_INT_MAX;
$c = PHP_INT_MIN;
$d = PHP_INT_MIN -1;
echo $a . PHP_EOL;
echo $b . PHP_EOL;
echo $c . PHP_EOL;
echo $d . PHP_EOL;
// вывод:
9223372036854775807
9.2233720368548E+18
-9223372036854775808
-9.2233720368548E+18
Для того чтобы вывести
int
переменную не в десятичной, а другой системе счисления, нужно воспользоваться функциями форматирования, например, sprintf
/printf
:
$a = 42;
echo sprintf("%o", $a) . PHP_EOL; // восьмеричная
echo sprintf("%x", $a) . PHP_EOL; // шестнадцатиричная, буквы в нижнем регистре
echo sprintf("%X", $a) . PHP_EOL; // шестнадцатиричная, буквы в верхнем регистре
echo sprintf("%b", $a) . PHP_EOL; // двоичная
// вывод:
52
2a
2A
101010
Переходим к выводу переменных типа
float
.
$floatNums = [
// Первый способ записи float-чисел
4.2,
4.2222,
4.22222222,
0.2,
0.0002,
0.00002,
0.000002,
// Второй способ записи float-чисел
1.2e4,
// Третий способ записи float-чисел
1.2E4,
5E-3,
5E-4,
5E-5,
// int значения превышающие размер типа int конвертируются во float
PHP_INT_MAX + 20,
];
foreach ($floatNums as $num) {
echo $num . PHP_EOL;
}
// вывод:
4.2
4.2222
4.22222222
0.2
0.0002
2.0E-5 //числа с пятью и более знаками после запятой выводятся в нотации с основанием и мантиссой
2.0E-6
12000
12000
0.005
0.0005
5.0E-5
9.2233720368548E+18
Как видим - числа выводятся с тем же количеством знаков после запятой, что были указаны при их объявлении. Для указания нужного числа знаков после запятой - пользуйтесь функциями форматирования, например, теми же
sprintf
/printf
или number_format
:
$floatNum = 4.23456789;
echo sprintf('%f', $floatNum) . PHP_EOL;
echo sprintf('%.2f', $floatNum) . PHP_EOL;
echo sprintf('%.5f', $floatNum) . PHP_EOL;
echo sprintf('%.12f', $floatNum) . PHP_EOL;
echo number_format($floatNum) . PHP_EOL;
echo number_format($floatNum, 2) . PHP_EOL;
echo number_format($floatNum, 5) . PHP_EOL;
echo number_format($floatNum, 6) . PHP_EOL;
// вывод
4.234568 // по умолчанию выводится 6 знаков после запятой
4.23
4.23457 // можно подумать что это округление, но нет, такой вывод связан с представлением числа в памяти программы
4.234567890000 // оставшиеся позиции заменяются нулями
4
4.23
4.23457 // аналогично, это НЕ округление
4.234568
Оставшиеся типы данных -
массив
, объект
и ресурс
, рассмотрим в заключительном посте.