현재 위치: > 최신 기사 목록> JSON_DECODE 기능을 피하는 방법 JSON을 구문 분석 할 때 수치 정밀도를 잃는 방법은 무엇입니까?

JSON_DECODE 기능을 피하는 방법 JSON을 구문 분석 할 때 수치 정밀도를 잃는 방법은 무엇입니까?

gitbox 2025-09-12
<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
" ; 에코 "

JSON_DECODE를 사용하여 직접 구문 분석하는 경우 :

"
; 에코 "
\ $ data = json_decode (\ $ json, true); \ nvar_dump (\ $ data);
"
; 에코 "

얻은 결과는 부정확 한 숫자를 유발할 수 있으며, 이는 과학 표기법 표현이되거나 종료 숫자가 손실 될 수 있습니다.

"
; 에코 "

해결책

"
; 에코 "

솔루션의 핵심 아이디어는 정수 나 부동 소수점 숫자로 직접 구문 분석하는 대신 많은 숫자를 문자열로 처리하는 것입니다. 다음 방법은 일반적으로 사용됩니다.

"
; 에코 "

방법 1 : JSON_BIGINT_AS_STRING 옵션을 사용하십시오

"
; 에코 "
\ $ data = json_decode (\ $ json, true, 512, json_bigint_as_string); \ nvar_dump (\ $ data);
"
; 에코 "

여기서 JSON_BIGINT_AS_STRING은 PHP 정수 범위를 초과하는 숫자를 문자열로 변환하여 정밀도의 손실을 피할 수 있습니다.

"
; 에코 "

방법 2 : JSON 생성 끝에서 많은 숫자를 문자열로 변환

"
; 에코 "

JSON 데이터 생성을 제어하면 JSON을 생성 할 때 많은 수의 따옴표를 랩핑 할 수 있습니다.

"
; 에코 "
{\"big_number \ ": \"12345678901234567890 \ "}
"
; 에코 "

이런 식으로, 문자열은 정밀도를 잃지 않고 PHP 구문 분석 중에 직접 얻을 것입니다.

"
; 에코 "

방법 3 : 임의의 정밀 수학 라이브러리를 사용하여 처리

"
; 에코 "

많은 수의 수학을해야한다면 PHP의 BCMATH 또는 GMP 확장을 사용할 수 있습니다.

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

이것은 플로팅 포인트 정확도 문제를 피하기 위해 정확도로 계산을 수행 할 수있게합니다.

"
; 에코 "

요약

"
; 에코 "
    "
;; 에코 "
  • PHP는 JSON을 구문 분석 할 때 큰 정수에서 정밀 손실을 경험할 수 있습니다.
  • "
    ; 에코 "
  • JSON_BIGINT_AS_STRING을 사용하거나 숫자를 사전에 변환하는 것입니다.
  • "
    ; 에코 "
  • 수학 작업이 필요한 경우 BCMATH 또는 GMP 확장을 사용하는 것이 좋습니다.
  • "
    ; 에코 "" ;; ?>