2013-06-05 3 views
0

Мы используем API-интерфейс платежей, который передает нам идентификатор идентификатора клиента, который мы тогда получаем для доступа к персональным данным API.PHP/сервер не может обрабатывать большие числа?

Примером идентификатора идентификатора клиента является 9253691936959900, однако PHP преобразует его в 9.2536919369599E + 15 (например). Очевидно, что 9.2536919369599E + 15 является научной нотой и бесполезно для нас, мы используем его для вызова API.

Мы пробовали различные преобразования, такие как number_format (9.2536919369599E + 15,16), но не имели радости.

Мы находимся на 32-битном сервере и на PHP 5.4.15.

Мы исчерпали почти каждый вариант, даже разработчики API изо всех сил пытаются понять проблему. Они уверены, что идентификатор токена клиента отправляется как строка, но по какой-то причине наша система интерпретирует его как целое и преобразует его в научную нотацию.

Любая помощь или совет будут высоко оценены.

Благодаря миллиона :)

+1

вы могли бы попытаться заставить его строку, когда PHP recieves значение т.е. $ вар = (строка) $ var2; – Martin

+0

@Martin он уже преобразован в научную нотацию в $ var2, поэтому на самом деле вы бросаете представление научной нотации $ var2 не большого int. – bolbol

+0

@bolbol Не мог ли он не набрасываться на строку при отправке, а не в точке получения? Или это все еще отмечено в этот момент? – Martin

ответ

2

РНР ограничен максимальному целому число, которое является 2^63-1 = 9223372036854775807 (это для 64-битной платформы. Другие платформы могут быть намного меньше, чем это).

Любое число больше макс будет преобразовано в плавающее число.

У вас есть несколько вариантов:

  1. Используйте строки для ID.
  2. Использовать номера не более 2^63
  3. Использовать PHP GMP library.
-1

Если ваш провайдер API возвращает ключ в формате JSON:

$key = '{"key":999999999999999999999999999999999999999999999999999999}' ; 
$a = json_decode($key, true, 2 , JSON_BIGINT_AS_STRING); 

print $a['key']; 

Результат выше отпечатка: 999999999999999999999999999999999999999999999999999999

+0

Я был бы рад узнать, почему ответ получил голос. – bolbol

Смежные вопросы