2017-01-18 1 views
0

방금 ​​Javascript를 배우기 시작했습니다. 아래 스크립트와 HTML 출력과 혼동 스러웠습니다.자바 스크립트 추가 표현

스크립트 :

<h1>JavaScript Variables</h1> 

<p id="demo"></p> 

<script> 
var x = 3.14; 
document.getElementById("demo").innerHTML = x + 1; 
</script> 

</body> 
</html> 

출력 : 자바 스크립트 변수

4.140000000000001

내가 왜 4.140000000000001 대신 4.14으로 얻을 것 궁금해? x + 2, x + 3, x + 4를 시도해도 출력 결과가 올바르지 않습니다. x가 10과 같은 다른 숫자에 추가되면 올바른 결과를 얻습니다. 귀하의 도움에 감사드립니다.

+0

가능한 복제 (http://stackoverflow.com/questions/588004/is-floating-point-math-broken) – Xufox

답변

-1

PI (소수점 이하 15 자리의 자바 스크립트 MATH에서 미리 정의 됨)의 값인 3.14 만 발생합니다. 이것을 확인하십시오

toFixed() 기능으로 십진수 다음 자릿수를 설정할 수 있습니다.

+0

이것은 완전하거나 정확하지 않습니다. '3.14'는 PI가 아닙니다. 그것은 PI 나'3.14'와 함께 일어날뿐만 아니라; 왜 일어 났는지 설명하지 못했습니다. 이 질문은 답변을해서는 안되지만 닫히기 때문에 실제 설명에 연결되는 속임수 목표 (문제의 첫 번째 주석)가 있습니다. – Xufox

0

컴퓨터 하드웨어는 실제 숫자를 계산하지 않습니다. 어느 숫자가 무한대의 확장을 요구하고 무한정 많은 숫자를 다룰 시간이 없기 때문에 어느 쪽이든 "정확하다". 예를 들어 우리가 1/3을 계산할 때 우리는 0.3333을 얻습니다. 우리는이 확장을 잘라내어 정확하다고 생각하는 부정확성에 익숙합니다. 물론 정확한 것은 아닙니다.

컴퓨터 하드웨어는 우리가하는 것처럼 기본 10 계산을 사용하지 않습니다. 기본 2 계산 형식을 사용합니다. 무한 확장은 밑 2에서 다릅니다. 예를 들어 1/10 (밑 10)은 0.000110001100011 .... (밑 2)입니다.

무한 십진 확장을 자르므로 두 시스템 모두 부정확합니다. 부정확성은 다릅니다. 컴퓨터 하드웨어는 소수점 이하 자릿수를 많이 유지함으로써 2 진수의 무한대 확장을 보완합니다.

테이크 어웨이는 예상했던 답변과 다른 경우가있을 수 있다는 것입니다.

응용 프로그램이 이러한 부정확성을 받아 들일 수없는 경우 (일부 회계 응용 프로그램에서는 허용되지 않음) 소프트웨어에서 기본 10 산술을 에뮬레이션해야합니다. 이것을위한 패키지가 있습니다. 나는 그들과 경험이 없다. 당신이 여기에서 시작하는 것은 하나입니다

https://github.com/MikeMcl/bignumber.js/

[? 소수점 연산이 깨진 떠]의
+0

_ "기본 숫자 2에는 재생할 숫자가 적기 때문에 기본 숫자 2에 무한대의 확장이 더 많이 있음을 알 수 있습니다."_ - 가능한 숫자의 수보다는 기본 요소의 수에 따라 달라지지 않습니까? – Xufox

+0

여기서는 필요하지 않은 수준으로 토론을 진행하는 데 필요한 주석을 던져서는 안됩니다. –