将大整数或浮点数完全转换为字符串

时间:2018-11-12 07:41:37

标签: php yii2 floating-point numbers

  

注意整数大于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之外的情况。

1 个答案:

答案 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的情况下对其进行加法或乘法运算。