Конвертируйте большие целые числа или числа с плавающей точкой в ​​точности так, как они есть - PullRequest
0 голосов
/ 12 ноября 2018

обратите внимание, что целое число больше, чем PHP_INT_MAX (9223372036854775807)

Код:

  $x = 1502648031311810478;
  var_dump($x);

Выход:

float 1.502648031381E+16

Я хочу это:

1502648031311810478

в виде строки.

Я перепробовал все способы приведения, но вывод 1.502648031381E + 16

Я хочу точное целое число в строке.

Это не дубликат Преобразование целого числа в строку в PHP , поскольку ни один из ответов на этот вопрос не охватывает случай, когда число находится за пределами PHP_INT_MAX.

1 Ответ

0 голосов
/ 12 ноября 2018

Похоже, вы используете 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.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...