PHP: Числа

Целые числа

Значениями типа integer являются целые числа. Целые числа могут быть указаны в десятичной, шестнадцатеричной, восьмеричной или двоичной системе счисления, с необязательным предшествующим знаком (+ или -).

Для записи в шестнадцатеричной системе счисления, перед числом необходимо поставить 0x. Для записи в восьмеричной системе счисления, перед числом необходимо поставить 0 (нуль). Для записи в двоичной системе счисления, перед числом необходимо поставить 0b:

1224
-123
0123
0x1A
0b111011

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

Значениями типа float (double) являются числа с плавающей точкой:

1.2
0.032

Числа с плавающей точкой также можно представлять в виде экспоненциальной записи. Экспоненциальная запись означает число, умноженное на 10 в указанной степени. Экспоненциальная запись состоит из числа, за которым ставится прописная или строчная буква E, после которой можно поставить необязательный знак + или - и далее показатель степени числа 10:

$num1 = 3.52e5;  // 352000
$num2 = 7E-4;    // 0.0007

echo $num1, "<br>";
echo $num2;

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

echo 0.00007;   // 7E-5

Ошибки округления чисел c плавающей точкой

Двоичное представление чисел с плавающей точкой неспособно обеспечить их точность. Двоичное представление чисел c плавающей точкой в PHP определяется согласно стандарту IEEE-754. Факт того, что число c плавающей точкой не может быть представлено точно, может приводить к проблемам, например при сравнении этих чисел:

$x = 0.3 - 0.2;
$y = 0.2 - 0.1;

echo ($x == $y), "<br>";    // false
echo ($x == 0.1), "<br>";   // false
echo ($y == 0.1);           // true

Эта проблема не является чем-то характерным для PHP, она проявляется во всех языках программирования, где используется двоичное представление чисел с плавающей точкой. Если необходима высокая точность представления чисел с плавающей точкой, нужно использовать математические функции произвольной точности:

$x = bcsub(0.3, 0.2, 1);
$y = bcsub(0.2, 0.1, 1);

echo ($x == $y), "<br>";    // true
echo ($x == 0.1), "<br>";   // true
echo ($y == 0.1);           // true

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

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

$nan = acos(8);
echo $nan;

Значение NAN обладает одной особенностью — оно не равно никакому значению, в том числе и другому NAN. Это значит, что нельзя использовать проверку $nan == NAN, чтобы определить, является ли значение переменной $nan значением NAN. Вместо этого следует выполнить проверку $nan != $nan. Эта проверка вернёт TRUE тогда и только тогда, когда $nan имеет значение NAN. Аналогичную проверку можно выполнить с помощью функции is_nan(). Она возвращает TRUE, только если аргумент имеет значение NAN.

Помимо этого, любая арифметическая операция с NAN, например, NAN / 10 всегда возвращает NAN.

С этой темой смотрят:

Копирование материалов с данного сайта возможно только с разрешения администрации сайта
и при указании прямой активной ссылки на источник.
2011-2016 © puzzleweb.ru

Реклама на сайте | puzinfo@puzzleweb.ru