Преобразование большого целого в полную строку в PHP

Я искал какое-то время, но то, что я могу найти, не то, что я ищу. Мне нужно преобразовать целое значение, которое может быть очень большим , в строку. Звучит просто: "$var" ? Нет, потому что это может привести к представлению E+ числа.

 <?php $var = 10000000000000000000000000; echo $var."\n"; echo "'$var'\n"; echo (string) $var."\n"; echo strval($var); ?> 

 1.0E+25 '1.0E+25' 1.0E+25 1.0E+25 

Как я могу сделать вывод 10000000000000000000000000 вместо этого?

Solutions Collecting From Web of "Преобразование большого целого в полную строку в PHP"

Это не хранится как целое число PHP, а float, поэтому вы получаете 1.0E + 25 вместо 10000000000000000000000000.

К сожалению, невозможно использовать это как целочисленное значение в PHP, поскольку PHP не может сохранить целое число такого размера. Если это происходит из базы данных, это будет строка, и вы можете делать с ней все, что захотите. Если вы сохраните его в другом месте, сохраните его как строку.

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

Также предлагается использовать GNU Multiple Precision , но это не включено в PHP по умолчанию.

 $int=gmp_init("10000000000000000000000000"); $string=gmp_strval($int); echo $string; 

UPDATE: Нашел следующий пост:

 // strval() will lose digits around pow(2,45); echo pow(2,50); // 1.1258999068426E+015 echo (string)pow(2,50); // 1.1258999068426E+015 echo strval(pow(2,50)); // 1.1258999068426E+015 // full conversion printf('%0.0f',pow(2,50)); // 112589906846624 echo sprintf('%0.0f',pow(2,50)); // 112589906846624 

Используйте printf или sprintf .

Целый номер, который вы хотите выразить:

 $var = 10000000000000000000000000; 

в вашей системе недоступен. Он слишком велик и поэтому PHP преобразует его в float, который изменит число (пример 32-битной системы):

  10000000000000000905969664 

Общие ограничения:

  yours : 10 000 000 000 000 000 000 000 000 32 bit: 2 147 483 648 64 bit: 9 223 372 036 854 775 808 

Изменение значения называется точностью с плавающей запятой, руководство PHP о целых числах расскажет вам о предел целочисленности и странице с плавающей точкой о точности с плавающей запятой (см. Большое красное предупреждение). В зависимости от вашей системы вы можете скомпилировать PHP с диапазонами, требуемыми вашим приложением, или использовать другой тип данных, например, с библиотекой gmp, которая может выбирать строки как целые числа и обрабатывать их.

Следующий пример показывает только вывод, но вы можете делать умножения и т. Д .:

 $r = gmp_init('10000000000000000000000000'); echo gmp_strval($r); 

Надеюсь, это полезно.

Я столкнулся с этой проблемой при получении идентификатора facebook и поиска его в MySQL. И через полчаса я нашел эту работу отлично! Вставьте эту строку в свой php-скрипт:

 ini_set('precision',30); 

От: https://forums.phpfreaks.com/topic/125907-solved-convert-big-number-to-string/#entry651084