<span><span><span class="hljs-meta"><?php</span></span><span>
</span><span><span class="hljs-comment">// 以下部分與文章內容無關</span></span><span>
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"這是示例開頭代碼\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">// 正文開始</span></span><span>
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"<h1>怎樣避免 json_decode 函數在解析 JSON 時出現數字精度丟失的情況?</h1>"</span></span><span>;
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"<p>在 PHP 中,使用 <code>json_decode " ; echo "如果直接使用json_decode解析:
" ; echo "\$data = json_decode(\$json, true);\nvar_dump(\$data);" ; echo "
得到的結果可能會出現數字不准確,變成科學計數法表示或末尾數字丟失。
" ; echo "解決的核心思路是把大數字作為字符串處理,而不是直接解析為整數或浮點數。以下幾種方法常用:
" ; echo "\$data = json_decode(\$json, true, 512, JSON_BIGINT_AS_STRING);\nvar_dump(\$data);" ; echo "
這裡的JSON_BIGINT_AS_STRING會把超過PHP 整數範圍的數字轉換為字符串,從而避免精度丟失。
" ; echo "如果你控制JSON 數據生成,可以在生成JSON 時把大數字用引號包起來:
" ; echo "{\"big_number\": \"12345678901234567890\"} " ; echo "這樣PHP 解析時會直接得到字符串,不會丟失精度。
" ; echo "如果需要對大數字做數學運算,可以使用PHP 的bcmath或gmp擴展:
" ; echo "\$bigNumber = \$data['big_number'];\necho bcadd(\$bigNumber, '1');" ; echo "
這樣可以在任意精度下進行計算,避免浮點精度問題。
" ; echo "