javascript float 수치 에 정밀도 오류 해결 방법
2290 단어 JavaScripthtml브 라 우 저
1. 텍스트 파일 test. txt 새로 만 들 기
2. 다음 코드 를 입력 하고 저장:
<HTML>
<Head>
<Script Language ="JavaScript">
alert(0.1+0.2 );
document. close();
</Script>
</Head>
</HTML>
3. test. txt 를 test. html 로 변경
4. 위 파일 을 브 라 우 저 로 열기
5. 튕 겨 나 온 결 과 는 0.3 이 아니 라 0. 3000000000004 입 니 다.
그래서 인터넷 에서 해결 방법 을 검색 했다. 많은 해결 방법 중에서 해결 방향 을 선택 했다. 수 치 를 정수 와 소수 두 부분 으로 나 누 어 각각 계산 하고 마지막 에 결 과 를 조립 했다.
결국 이런 결과 가 나 온 이 유 는 무엇 일 까?바 이 너 리 컴 퓨 팅, CPU 의 자릿수 와 관련 이 있 는 것 같 습 니 다. 구체 적 으로 깊이 있 는 이 유 는 나중에 깊이 연구 해 보 겠 습 니 다.만약 높 은 사람 이 지나 가면 아 끼 지 않 고 가르쳐 주시 면 저 는 매우 감사 하 겠 습 니 다!
먼저 해결 방향 을 코드 로 다음 과 같이 표현 한다.
<HTML>
<Head>
<Script Language ="JavaScript">
alert(Sum_TwoFloatNumber(0.1,0.2) );
document. close();
function Sum_TwoFloatNumber(val1,val2) {
var TotalNum;
val1 = val1 + '' ;
var sp_val1 = val1.split(".") ;
val2 = val2 + '' ;
var sp_val2 = val2.split(".") ;
if ((sp_val1.length==2) && (sp_val2.length==2)) {
//--- ---
TotalNum = TotalNum + 0 ;
TotalNum = parseFloat(sp_val1[0]) + parseFloat(sp_val2[0]) ;
var length1 = sp_val1[1].length;
var length2 = sp_val2[1].length;
var length;
if(length1>=length2){
length = length1;
sp_val2[1] = sp_val2[1]*Math.pow(10,length1 - length2);
}else if(length1<length2){
length = length2;
sp_val1[1] = sp_val1[1]*Math.pow(10,length2 - length1);
}
var temp_second_part = Number(sp_val1[1]) + Number(sp_val2[1]);
temp_second_part = temp_second_part/Math.pow(10,length);
TotalNum = TotalNum + temp_second_part;
}
else {
TotalNum = parseFloat(val1) + parseFloat(val2) ;
}
return TotalNum;
}
</Script>
</Head>
</HTML>
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
기초 정리 - 1문자 (String) 숫자 (Number) 불린 (Boolean) null undefined 심볼 (Symbol) 큰정수 (BigInt) 따옴표로 묶어 있어야 함 Not-A-Number - 숫자 데이터 / 숫자로 표...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.