PHP: преобразование 64-битного целого числа в строку - PullRequest
3 голосов
/ 13 мая 2009

Я пытаюсь использовать жестко запрограммированное 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

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

Ответы [ 4 ]

3 голосов
/ 13 мая 2009

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

Строка типа:

$i = 76561197961384956;

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

2 голосов
/ 13 мая 2009

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

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

2 голосов
/ 13 мая 2009

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

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

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

0 голосов
/ 13 мая 2009

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

...