14

解決方法がわからない珍しい問題があります。

アプリケーションIDが保存されているJSONファイルがあります。つまり、次のとおりです。

"app_id": "363924477024846"

HDD から JSON ファイルを読み取り、json_decode() で解析してアプリケーションで使用します。ただし、ある時点で、app-id をブラウザーに送信したいと考えています。問題は、その変数をエコー出力すると、次のように出力されることです。

2.7110712626725E+14

これを防ぐ方法はありますか?私はそれを使って計算を行っていないので、PHPによって数字として脅かされる必要はありません.文字列は問題ありません。しかし、数値のみで表されているため、json_decode() はそれを数値として脅かすようです。引用符で囲んだり (文字列を示す必要があります)、この場合、PHP が愚かな型ヒントを行っているだけかもしれませんが、私はしません。知る...

それを処理する方法についてのアイデアはありますか?

4

5 に答える 5

22

私はここで同じ問題を抱えていました:この問題を解決するphpsnumber_format関数を使用するだけです:

$number = "363924477024846";
echo number_format($number, 0, '', '');

// 363924477024846
于 2012-09-26T19:39:19.750 に答える
5

json_decodeには、大きな整数を文字列として扱うオプションがあるようです。

json_decode($json, false, 512, JSON_BIGINT_AS_STRING)
于 2012-09-26T19:41:23.183 に答える
1

手っ取り早い解決策は、数値の先頭または末尾に文字を追加して、PHP がそれを文字列として処理するようにすることです。「363924477024846」の代わりに「z363924477024846」を使用し、必要に応じて z を削除してください。明らかに、送信する前にこれを追加してください。

于 2012-09-26T19:37:27.740 に答える
1

文字列にキャストしてみてください

echo((string)$theNumber);
于 2012-09-26T19:36:34.870 に答える
0

JSONファイルの内容を変更できる場合は、次のようにアプリケーションIDを引用符で囲んでみましたか。

"app_id": "'363924477024846'"

clentfortが言ったように、32ビット整数の最大値を超えています(約21億の署名付き)

于 2012-09-26T19:39:39.033 に答える