2014-09-18 3 views
0
echo intval(hexdec('c0199506cb5dd57f')); // -4604485287595354112 

Когда мы сделали то же самое на клиентах есть еще:PHP intval теряет точность с большими десятичными

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

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

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

ответ

1

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

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

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

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

+0

В качестве альтернативы существуют внешние плагины для обработки очень больших номеров. Скажите, пожалуйста, какие плагины есть? –

+0

Да, например [GMP] (http://php.net/gmp) или [BCMath] (http://php.net/bcmath). – JakeSteam

Смежные вопросы