, 그 그것은 실제로 나에게 0을 제공해야 나에게 매우 이상한 대답자바 스크립트 덧셈과 뺄셈 나는이 코드 조각을 실행하려고 할 때 이상한
<script type="text/javascript">
a = 17.98 + 7.99 - 17.98 - 7.99 + 0 - 0;
alert(a);
</script>
을주는 행동. 그러나 대신에 그것은 지수 적 가치를줍니다. 답을 좀 도와 주실 수 있습니까?
, 그 그것은 실제로 나에게 0을 제공해야 나에게 매우 이상한 대답자바 스크립트 덧셈과 뺄셈 나는이 코드 조각을 실행하려고 할 때 이상한
<script type="text/javascript">
a = 17.98 + 7.99 - 17.98 - 7.99 + 0 - 0;
alert(a);
</script>
을주는 행동. 그러나 대신에 그것은 지수 적 가치를줍니다. 답을 좀 도와 주실 수 있습니까?
-1.7763568394002505e-15가 표시됩니다. 이것은 -1.7763568394002505 * 10^(- 15)를 나타냅니다. 이 값은 0에 매우 가깝습니다. 그러나 당신이 0이되지 않는다는 사실은 반올림 오류 때문입니다. 이것은 정상적인 동작입니다. 당신이 정말로에 대해 자세히 알아하려면
, 당신은 더 많은 부동 소수점 연산을위한 정상적인 동작입니다 http://docs.oracle.com/cd/E19957-01/806-3568/ncg_goldberg.html
에서 확인할 수 있습니다.
사용 된 이진 부동 소수점 형식으로 정확하게 표현할 수있는 값의 수가 제한되어 있으므로 대부분의 값은 가능한 가장 가까운 값으로 표시됩니다.
7.99
과 같은 값은 7.98999999999997754
과 같이 표시 될 수 있습니다. 코드가 구문 분석 될 때 실제로 얻게되는 값입니다.
실제 값과 예상 값의 차이가 너무 작기 때문에 값을 직접 표시 할 때 나타나지 않습니다. 값을 문자열 형식으로 되돌릴 때 값이 반올림되므로 반올림됩니다. 몇 가지 계산을 할 때 작은 차이가 더 해지고 조만간 당신은 그것을 볼 것입니다.
얻은 결과는 -0.0000000000000017763568394002505
이므로 0에 매우 가깝지만 정확히 0은 아닙니다.
컴퓨터는 부동 소수점을 처리 할 때 실제로 좋지 않습니다.
예 : = 0.30000000000000004
내부적 컴퓨터 정확하게 모든 0.1, 0.2 또는 0.3와 같은 숫자를 나타낼 수있는 포맷 (이진 부동 소수점) 사용하기 때문에 0.1 + 0.2. 코드가 컴파일되거나 해석 될 때 "0.1"은 이미으로 가장 가까운 숫자로 반올림되어 결과가 계산되기 전에 반올림 오류가 작은 이됩니다.
가 더 읽기 :이 대한 자세한 내용을 여기 읽을 수 있습니다 What Every Programmer Should Know About Floating-Point Arithmetic
을 http://stackoverflow.com/questions/1458633/elegant-workaround-for-javascript-floating-point-number- 문제 –