Position actuelle: Accueil> Derniers articles> Comment éviter la fonction JSON_DECODE perdant la précision numérique lors de l'analyse de JSON?

Comment éviter la fonction JSON_DECODE perdant la précision numérique lors de l'analyse de JSON?

gitbox 2025-09-12
<span><span><span class="hljs-meta"><?php</span></span><span>
</span><span><span class="hljs-comment">// Les parties suivantes n&#39;ont rien à voir avec le contenu de l&#39;article</span></span><span>
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"C&#39;est le code débutant de l&#39;exemple\n"</span></span><span>;
</span><span><span class="hljs-function"><span class="hljs-keyword">function</span></span></span><span> </span><span><span class="hljs-title">demo</span></span><span>(</span><span><span class="hljs-params"></span></span><span>) {
    </span><span><span class="hljs-keyword">return</span></span><span> </span><span><span class="hljs-string">"Demo function output"</span></span><span>;
}
</span><span><span class="hljs-meta">?></span></span><span>

<hr>

</span><span><span class="hljs-meta"><?php</span></span><span>
</span><span><span class="hljs-comment">// Démarrer le texte</span></span><span>
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"<h1>Comment l&#39;éviter json_decode Les fonctions analysent JSON La précision numérique est perdue?</h1>"</span></span><span>;

</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"<p>exister PHP milieu,utiliser <code>json_decode
" ; Echo "

Si vous utilisez json_decode pour analyser directement:

"
; écho "
\ $ data = json_decode (\ $ json, true); \ nvar_dump (\ $ data);
"
; écho "

Les résultats obtenus peuvent provoquer des nombres inexacts, qui deviennent des représentations de notation scientifique ou les nombres finaux sont perdus.

"
; écho "

Solution

"
; écho "

L'idée principale de la solution est de traiter de grands nombres en tant que chaînes, plutôt que de les analyser directement en nombres entiers ou à virgule flottante. Les méthodes suivantes sont couramment utilisées:

"
; écho "

Méthode un: utilisez l'option JSON_BIGINT_AS_STRING

"
; écho "
\ $ data = json_decode (\ $ json, true, 512, json_bigint_as_string); \ nvar_dump (\ $ data);
"
; écho "

Le JSON_BIGINT_AS_STRING ici convertira des nombres qui dépassent la plage entière PHP en chaînes, évitant ainsi la perte de précision.

"
; écho "

Méthode 2: Convertir de grands nombres en chaînes à l'extrémité de la génération JSON

"
; écho "

Si vous contrôlez la génération de données JSON, vous pouvez envelopper de grands nombres en guillemets lors de la génération de JSON:

"
; écho "
{\" big_number \ ": \" 12345678901234567890 \ "}
"
; écho "

De cette façon, la chaîne sera obtenue directement pendant l'analyse PHP sans perdre de précision.

"
; écho "

Méthode 3: Utiliser la bibliothèque mathématique de précision arbitraire pour traiter

"
; écho "

Si vous devez faire des mathématiques sur de grands nombres, vous pouvez utiliser l'extension BCMATH ou GMP de PHP:

"
; écho "
\ $ bignumber = \ $ data [&#39;big_number&#39;]; \ necho bcadd (\ $ bignumber, &#39;1&#39;);
"
; écho "

Cela permet de effectuer des calculs à n'importe quelle précision pour éviter les problèmes de précision des points flottants.

"
; écho "

Résumé

"
; écho "
    "
; écho "
  • PHP peut subir une perte de précision sur les grands entiers lors de l'analyse de JSON.
  • "
    ; écho "
  • Utiliser JSON_BIGINT_AS_STRING ou convertir les nombres en chaînes à l'avance est une solution courante.
  • "
    ; écho "
  • Si des opérations mathématiques sont nécessaires, il est recommandé d'utiliser une extension BCMath ou GMP .
  • "
    ; écho "" ; ?>