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

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

Например.

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

выходы

string(7) "1.0e+19"

но мне нужно

string(19) "9999999999999999999"

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

Ответ 1

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

$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"

Ответ 2

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

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

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

Ответ 3

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

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

Ответ 4

Просто сохраните значение в виде строки и отображения...!

   $bigint = '9999999999999999999';

    var_dump($bigint);

Вывод:

string(19) "9999999999999999999"