Я искал какое-то время, но то, что я могу найти, не то, что я ищу. Мне нужно преобразовать целое значение, которое может быть очень большим , в строку. Звучит просто: "$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
вместо этого?
Это не хранится как целое число 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