이 기사는 JS 긴 정수 정확도 문제를 분석합니다. 참조를 위해 공유하십시오. 특정 분석은 다음과 같습니다.
문제 설명 :
백그라운드에는 스크립트 기능이 있으며, 이는 자바 코드를 동적으로 호출하는 스크립트를 작성할 수 있습니다.
코드 사본은 다음과 같습니다. importClass (com.ztgame.center.controller.api, p360apicontroller);
var 역할 = 10214734953631045;
p360apicontroller.notice (roleid, 4);
스크립트는 성공적으로 실행되었지만 실행 결과는 설정과 다릅니다. 이 사람은 이메일을받지 못했습니다
로그 충전 상을 보았습니다. reaconID = 10214734953631044;
이 문자 ID 번호는 1이 적습니다.
문제 분석 :
JS 정밀 문제 여야합니다.
정확성
정수 (소수 또는 지수 계수가없는)는 최대 15 자리입니다.
소수점의 최대 숫자 수는 17이지만 부동 소수점 작업이 항상 100% 정확한 것은 아닙니다.
스크립트를 수정하십시오
코드 사본은 다음과 같습니다. var 역할 = 10214734953631045;
var output = roleiid;
산출:
1.0214734953631044E16;
이것은 JavaScript의 잘못이 아니며 Java의 잘못도 아닙니다. 위의 길이로의 전환은 실제로 roleiid = 10214734953631044입니다.
그 일이 할 수 있습니까?
JavaScript 콘솔은 문자열을 입력 한 다음 integer.valueof 또는 long. valueof java?
해결책:
역할 ID를 문자열로 JavaScripttengine으로 전달하기 위해 일반 변환 방법을 작성하십시오.
코드 사본은 다음과 같습니다. importClass (com.ztgame.common.util.stringkit);
importClass (com.ztgame.center.controller.api, p360apicontroller);
문자열로 선언하십시오
코드 사본은 다음과 같습니다. var roleid = "10214734953631045";
이런 식으로 JavaScriptengine이 얻는 것은 문자열입니다. 실제로, 그 일은 그것을 처리하는 Java입니다.
코드 사본은 다음과 같습니다.
실행이 성공적입니다. 먼저 사용하십시오 ~
이 기사가 모든 사람의 JavaScript 프로그래밍에 도움이되기를 바랍니다.