целочисленное переполнение — PHP intval теряет точность с большим десятичным числом

echo intval(hexdec('c0199506cb5dd57f')); // -4604485287595354112

Когда мы делали то же самое на клиентах, было другое:

client on objective-c returns -4604485287595354753
client wrote on java returns  -4604485287595354753

Я думаю, это потому, что целое число становится переполненным (PHP не поддерживает целые числа со знаком) и в результате потери точности.

Как решить эту проблему?

0

Решение

«Максимальное значение зависит от системы. 32-битные системы имеют максимальный целочисленный диапазон со знаком от -2147483648 до 2147483647. Так, например, в такой системе intval (‘1000000000000’) вернет 2147483647. Максимальное целочисленное значение со знаком для 64-битного системы 9223372036854775807. «

От: http://php.net/manual/en/function.intval.php

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

Какое решение лучше, зависит от того, для чего используется номер.

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]