bigint: 12000000000002539의 JSON 전송은 12000000000002540으로 변환됩니까?
raw data를 다음과 같이 전송합니다.[{id: 12000000000002539, Name: "Some Name"}]
그리고 나는 그 대상을 얻고 있다.[{id: 12000000000002540, Name: "Some Name"}]
해석 후 서버 측에서 id를 문자열로 변환하는 것이 도움이 될 것 같습니다.하지만 bigint 데이터를 올바르게 전송할 수 있는 더 좋은 방법이 있을까요?
이 값은 실제로 JavaScript의 최대 수치(1.7 정도)를 넘지 않습니다308.
그러나 이 값은 "통합 정밀도" 범위를 초과하고 있습니다.잘못된 번호가 전송된 것이 아니라 리터럴 12000000000002539가 12000000000002540만큼 정확하게 표현될 수 있기 때문에 JavaScript에는 올바른 수치가 존재하지 않습니다.(인테그레이션의 범위는53 약 +/- 2입니다).
이것은, 2배의 상대 정밀도(IEEE-754 speak의 바이너리64) 타입을 사용해 정수를 포함한 모든 수치를 격납하는 흥미로운 현상입니다.
12000000000002539 === 12000000000002540 // true
수치로 정확하게 저장되는 최대 유효 자릿수는 15(실제로는 15.95)입니다.위의 경우 17자리 유효자리가 존재하기 때문에 일부 최하위 정보는 사일런트하게 손실됩니다.이 경우 JavaScript 파서/엔진이 리터럴 값을 읽습니다.
JavaScript에서 이 크기의 정수만 안전하게 처리할 수 있는 방법은 문자열 리터럴을 사용하거나 다른 방식으로 분해하는 것입니다(예: 커스텀 숫자 유형이나 "bigint 라이브러리").다만, 문자열은 사람이 읽을 수 있고, 비교적 콤팩트하고(JSON에서는 2글자만 추가), 특별한 시리얼화가 필요 없기 때문에 사용하는 것을 추천합니다.이 경우 값은 "id"일 뿐이므로 수학은 필요 없습니다.
해피 코딩.
언급URL : https://stackoverflow.com/questions/8663298/json-transfer-of-bigint-12000000000002539-is-converted-to-12000000000002540
'it-source' 카테고리의 다른 글
미정의 In React 확인 (0) | 2023.03.22 |
---|---|
PLIST를 JSON으로 변환하기 위한 명령줄 도구? (0) | 2023.03.22 |
WordPress를 사용하여 URL 개서를 위해 Windows Azure를 설정하는 방법 (0) | 2023.03.22 |
워드프레스:고급 사용자 지정 필드: 새 워드프레스 설치로 필드 내보내기 및 가져오기 (0) | 2023.03.22 |
모든 AJAX 요구에 대해 글로벌헤더를 설정할 수 있습니까? (0) | 2023.03.22 |