Похоже, вы используете json_decode
. Он будет преобразовывать числа в целые числа, где это возможно, в противном случае с плавающей точкой:
// 32bit integers
var_dump(json_decode("2147483647")); // int(2147483647)
var_dump(json_decode("2147483648")); // float(2147483648)
// 64bit integers
var_dump(json_decode("9223372036854775807")); // int(9223372036854775807)
var_dump(json_decode("9223372036854775808")); // float(9.2233720368548E+18)
Вы можете использовать флаг JSON_BIGINT_AS_STRING
, чтобы json_decode
декодировал большие целые числа в качестве исходного значения строки :
// 32bit integers
var_dump(json_decode("2147483647", false, 512, JSON_BIGINT_AS_STRING)); // int(2147483647)
var_dump(json_decode("2147483648", false, 512, JSON_BIGINT_AS_STRING)); // string(10) "2147483648"
// 64bit integers
var_dump(json_decode("9223372036854775807", false, 512, JSON_BIGINT_AS_STRING)); // int(9223372036854775807)
var_dump(json_decode("9223372036854775808", false, 512, JSON_BIGINT_AS_STRING)); // string(19) "9223372036854775808"
Обратите внимание, что число как строка не очень полезно для арифметики, например Вы не можете добавлять или умножать его без его (авто) конвертации в float.