Intereting Posts
Как вызвать список продуктов в представлении produt Magento CodeIgniter, токен Csrf API Google Диска (PHP) не может просматривать файлы mysql database, выпадающее меню, используя данные, уже введенные в html / php CakePHP: Неустранимая ошибка: допустимый размер памяти 536870912 байт исчерпан (пытался выделить 52 байта) preg_replace удалить несколько \ n Подтвердить перед удалением PHP – найдите, существует ли какое-либо из ключевых слов в массиве в строке Преобразование URL-адреса в скриншот (скрипт) Лучший способ проверить переменную для пустой или пустой строки? Автоматическое создание настраиваемых значений полей в WordPress Как использовать PHP для сравнения одной переменной с любым экземпляром нечетного числа другой переменной? Функции WSDL с тем же именем. Как выбрать один? Что это за «iif» в php? В объявлениях пространства имен внутри включенных файлов автоматически входит пространство имен родительского файла (PHP)?

PHP: Как преобразовать bigint из int в строку?

Я хочу, чтобы иметь возможность конвертировать большие ints в свои полные производные строки.

Например.

$bigint = 9999999999999999999; $bigint_string = (string) $bigint; var_dump($bigint_string); 

выходы

 string(7) "1.0e+19" 

но мне нужно

 string(19) "9999999999999999999" 

Пожалуйста, не говорите мне, что я должен был сначала установить значение $ bigint как строку. Это не вариант. Я действительно застрял и не знаю, возможно ли это вообще?

Вы должны убедиться, что вы набираете то, что вы имеете в виду:

 $bigint = 9999999999999999999; 

Это не целое число PHP, а float:

 float(1.0E+19) 

Если бы вы это сделали

 $bigint = (int) 9999999999999999999; 

Фактически вы бы установили целое число, но это был бы не тот номер, который вы могли ожидать:

 int(-8446744073709551616) 

Это не проблема, чтобы превратить это в строку, как вы могли догадаться. Поэтому будьте осторожны, когда вы пишете цифры в код, который вы на самом деле пишете, что вы имеете в виду.

См. Эту строку еще раз:

 $bigint = 9999999999999999999; 

попытайтесь понять, что вы на самом деле писали. Это не целое число, потому что PHP превратит его в float. См. Пример # 4 Переполнение целых чисел в 64-разрядной системе на странице с целым числом .

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

 $bigint = gmp_init("9999999999999999999"); $bigint_string = gmp_strval($bigint); var_dump($bigint, $bigint_string); 

Вывод:

 resource(4) of type (GMP integer) string(19) "9999999999999999999" 

Используйте strval() .

 echo strval($bigint); // Will output "99999999999999999" 

EDIT: после немного лучшего исследования (> 5000 мс), я вижу, что невозможно точно подсчитать числа до такой точности, потому что PHP не может сохранить целое число такого размера (зависит от битовой системы ОС, 32/64). Похоже, это невозможно сделать, не теряя точности.

Используйте printf() , это сделано для этого:

 echo printf("%d", $bigint); 

Просто сохраните значение как строку и дисплей …!

  $bigint = '9999999999999999999'; var_dump($bigint); 

Вывод:

 string(19) "9999999999999999999"