как я могу создать исключение, если приведение из строки в int привело к потере точности?


Есть ли способ на самом деле проверить до или после преобразования строки в int, была ли потеря точности, и создать исключение?

$id = "21321312412435453453453454"
$numId = (int) $id;
Author: Michail Michailidis, 2015-02-25

2 answers

Это должно сработать для вас:

(Только что использовал php predefined constants для сравнения)

$id = "21321312412435453453453454";
if($id > PHP_INT_MAX)
    echo "too big";
else
    echo "okay";

Вывод:

too big

РЕДАКТИРОВАТЬ:

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

define('PHP_INT_MIN', ~PHP_INT_MAX); 

Вы можете прочитать о PHP_INT_MAX даже в руководстве: http://php.net/manual/en/language.types.integer.php

И цитата оттуда:

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

 4
Author: Rizier123, 2015-02-25 16:00:29

Попробуйте привести его обратно к строке и сравнить их.

 1
Author: Christian Lundahl, 2015-02-25 15:40:34