ホームページ >バックエンド開発 >PHPチュートリアル >phpのnumber_format関数について。
echo number_format(88899626759579787, 0, '', '');
出力結果が 88899626759579792 なのはなぜですか?
http://www.w3school.com.cn/php/func_string_number_format.asp より
この例を通してそれを知ることができます
echo PHP_INT_MAX; // php的整形能表示的最大整数var_dump(number_format(88899626759579700, 0, '', ''));
開発環境はwin7 64bitです。 centOS 64bit でも同じエラーが発生します
他の API からインポートされた数値です
使用されている strval 関数が使いにくいです。ありがとうございます!
あなたの環境は 32 ビットである必要があるため、上記の数値 88899626759579787 を表すには浮動小数点型を使用する必要があります
この例を通してそれを知ることができます。
echo PHP_INT_MAX; // php的整形能表示的最大整数var_dump(number_format(88899626759579700, 0, '', ''));
PHP の長い型は、そのような大きな正の数を表すことはできません
PHP の開発。組織は win 用の 64 ビット バージョンをリリースしたことがありません
可能であれば、php5.4 以降にアップグレードするのが最善です。なぜなら、php は 5.4 で json_decode にパラメータを追加したからです。
5.4.0 options パラメータが追加されました。 JSON デコード オプションのビットマスクは現在 JSON_BIGINT_AS_STRING のみがサポートされています (デフォルトでは大きな整数を浮動小数点数としてキャストします)
<?php$json = '12345678901234567890';var_dump(json_decode($json));var_dump(json_decode($json, false, 512, JSON_BIGINT_AS_STRING));?>以上例程会输出:float(1.2345678901235E+19)string(20) "12345678901234567890"
{"a":"12345678901234567890"} などの長さ
は
{"a":"__12345678901234567890"} に置き換えることができます
json_decode が完了したら、__ ロゴを削除します
可能であれば、アップグレードすることをお勧めしますphp5.4以降、phpは5.4であるため、json_decodeにパラメータを追加します
JSONデコードオプションのビットマスクが追加されました。現在、JSON_BIGINT_AS_STRINGのみがサポートされています(デフォルトは大きな整数をキャストします)。 floats)
<?php$json = '12345678901234567890';var_dump(json_decode($json));var_dump(json_decode($json, false, 512, JSON_BIGINT_AS_STRING));?>以上例程会输出:float(1.2345678901235E+19)string(20) "12345678901234567890"
json_decode が完了したら、__ ロゴを削除してください
詳細な回答ありがとうございます
バージョンアップできない場合の方法と同様に解決しました。
開発環境で取得されたデータが範囲外であるだけであり、実際の運用環境では範囲外の問題は発生しません
したがって、解決策は文字列解析メソッドで解決されます
最後に。ポストの