На самом деле вы должны убедиться, что вы вводите то, что имеете в виду:
$bigint = 9999999999999999999;
Является не целым числом PHP, а числом с плавающей запятой:
float(1.0E+19)
Если бы ты сделал
$bigint = (int) 9999999999999999999;
На самом деле вы бы установили целое число, но это было бы не то число, которое вы могли бы ожидать:
int(-8446744073709551616)
Превратить это в строку совсем не проблема, как вы могли догадаться. Так что следите за тем, чтобы когда вы записываете числа в код, вы действительно писали то, что имеете в виду.
Посмотрите еще раз на эту строку:
$bigint = 9999999999999999999;
попытайтесь понять, что вы на самом деле написали. Это вовсе не целое число, потому что PHP превратит его в число с плавающей запятой. См. Пример #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"
person
hakre
schedule
22.08.2011