注意整数大于PHP_INT_MAX(9223372036854775807)
代码:
$x = 1502648031311810478;
var_dump($x);
输出:
float 1.502648031381E+16
我想要这个:
1502648031311810478
作为字符串。
我尝试了所有类型的转换,但输出为1.502648031381E + 16
我想要字符串中的整数。
这不是Converting an integer to a string in PHP的重复项,因为该问题的答案都没有涵盖数字在PHP_INT_MAX
之外的情况。
答案 0 :(得分:3)
似乎您正在使用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的情况下对其进行加法或乘法运算。