Конвертировать большое целое число в полную строку в PHP - PullRequest
6 голосов
/ 08 марта 2012

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

Ответы [ 4 ]

8 голосов
/ 08 марта 2012

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

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

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

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

$int=gmp_init("10000000000000000000000000");
$string=gmp_strval($int);
echo $string;
3 голосов
/ 08 марта 2012

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.

2 голосов
/ 07 апреля 2017

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

ini_set('precision',30);

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

2 голосов
/ 08 марта 2012

Целое число, которое вы хотите выразить:

$var = 10000000000000000000000000;

недоступно в вашей системе. Он слишком большой, и поэтому PHP преобразует его в число с плавающей точкой, которое изменит число (пример 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);

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

...