Reputation: 3778
I have a unusual problem which I have no idea how to solve.
I have a JSON file, where a application id is stored, namely the following:
"app_id": "363924477024846"
I read my JSON file from the HDD and parse it with json_decode() to use it in my application. However, at one point, I want to have the app-id sent to the browser. The problem is, if I echo that variable out, its printed as following:
2.7110712626725E+14
Is there any way to prevent this? I don't need it to be threated as a number by PHP since I am not doing any calculations with it - a string would be fine. But since its represented by numbers only, it seems that json_decode() threats it as a number, even tough I put quotes around it (which should indicate a string) or maybe PHP just does stupid type hinting in this case, I don't know...
Any ideas on how to handle that?
Upvotes: 15
Views: 9477
Reputation: 1318
I had the same problem here: Simply use phps number_format function, which solves this issue:
$number = "363924477024846";
echo number_format($number, 0, '', '');
// 363924477024846
Upvotes: 23
Reputation: 3444
It looks like json_decode has an option to treat big integers as strings.
json_decode($json, false, 512, JSON_BIGINT_AS_STRING)
Upvotes: 5
Reputation: 11120
If you can change the JSON file contents, have you tried wrapping the application ID in quotes, like so:
"app_id": "'363924477024846'"
As clentfort has said, you're exceeding the max value for a 32bit integer (~2.1bn signed)
Upvotes: 0
Reputation: 12356
A quick and dirty solution would be to add some character at the beginning or end of your number to force PHP to treat it as a string. Maybe intstead of "363924477024846" use "z363924477024846" and then remove the z when you need to use it. Obviously append this before you send it.
Upvotes: 1
Reputation: 19888
try casting it to a string
echo((string)$theNumber);
Upvotes: 1