Разработчику. Сборник рецептов PHP
Задавайте вопросы

Числа

Вернуться назад

Введение

В повседневной жизни идентифицировать число не трудно. Это и текущее время (например, 15:00), и $1.29 (цена какого-нибудь товара). Это может быть число π, равное отношению длины окружности к ее диаметру. Числа могут быть достаточно большими, например число Авогадро, равное примерно 6×1023. В PHP числа могут представлять все, что здесь было перечислено.

Однако PHP не трактует все эти числа как «числа», а делит их на две группы: целые и числа с плавающей точкой. Целые – это целые числа, такие как –4, 0, 5 и 1 975. Числа с плавающей точкой – это десятичные числа, такие как −1,23; 0,0; 3,14159 и 9,9999999999.

Удобно, что в основном PHP сам отслеживает различия между этими двумя типами данных и автоматически преобразует целые в числа с плавающей точкой, а числа с плавающей точкой – в целые. Это с легкостью позволяет игнорировать скрытые детали. Это также означает, что 3/2 равно 1.5, а не 1, как это было бы в некоторых языках программирования. PHP также автоматически конвертирует строки в числа и обратно. Например, 1+"1" равно 2.

Однако иногда это беззаботное игнорирование приводит к ошибкам. Во-первых, числа не могут быть бесконечно большими или бесконечно малыми; существует минимальное значение, равное 2.2e−308, и максимальное значение, приблизительно равное 1.8e308.1
(На самом деле эти значения зависят от платформы, но они общеприняты, поскольку описаны в 64-битном стандарте 754 IEEE.)

Если нужны числа большие (или меньшие), то необходимо использовать библиотеки BCMath или GMP, которые рассматриваются в рецепте описанном ниже.

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

В настоящее время это значение достаточно мало в большинстве случаев, но при определенных обстоятельствах можно столкнуться с проблемами.

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

Вернуться назад

Рейтинг@Mail.ru

Яндекс.Метрика

Индекс цитирования


Рейтинг Сайтов ДОСКИ.РУ