PHP:Преобразование 64-битного целого числа в строку

StackOverflow https://stackoverflow.com/questions/856549

Вопрос

Я пытаюсь использовать жестко закодированное 64-битное целое число в строковой переменной.

Упрощенно, я хочу сделать что-то вроде этого:

$i = 76561197961384956;
$s = "i = $i";

Что должно привести к s существование:

i = 76561197961384956

Это, очевидно, не работает, поскольку PHP преобразует большие целые числа в число с плавающей запятой, поэтому s является:

i = 7.65611979614E+16

Хотя некоторые другие методы, такие как литье и т. д.неудачно, я нашел number_format() и используйте его следующим образом:

$s = "i = " . number_format($i, 0, '.', '');

Но это приводит к s существование:

i = 76561197961384960

Похоже на проблему аппроксимации, но как это исправить?

Это было полезно?

Решение

Вы теряете точность при назначении, а не при преобразовании строк.Если значение этой переменной на самом деле жестко запрограммировано и вы не можете его изменить, вы ничего не сможете сделать.

Строка типа:

$i = 76561197961384956;

всегда будет терять точность.Если вам нужно сохранить все это, сохраните его в строке, вы не можете сохранить его как целое число и сохранить все цифры.

Другие советы

Я думаю, что единственный способ - использовать bcmath функции.

Для математики произвольной точности PHP предлагает двоичный калькулятор, который поддерживает числа любого размера и точности, представленные в виде строк.

Это ваш $i это неправильно, а не преобразование строк - PHP внутренне использует 32-битные целые числа.

на данный момент единственный способ выполнить математические вычисления с большими целыми числами в php — это использовать расширения bcmath или gmp, которые обрабатывают большие числа как строки.64-битные целые числа планируются в php6.

поэтому при использовании больших целых чисел преобразуйте их в строку, иначе вы потеряете точность при назначении (автоматическое приведение к числу с плавающей запятой), а затем используйте одну из библиотек строковой математики для дальнейшей обработки вашего числа.

Вы пробовали использовать функцию PHP intval()?

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top