CHAPTER2. JS 숫자

김재민·2021년 12월 24일
0

JavaScript

목록 보기
3/7
post-thumbnail

2.3 숫자

자바스크립트의 숫자 타입은 number가 유일( 정수, 소수점 숫자 포함)

2.3.1 숫자구문

소수점 앞 정수가 0이면 생략 가능

var a = 0.42;
var b = .42;

소수점 이하가 0일 때도 생략 가능하다.

var a = 42.0;
var b = 42.; //42. 로 표기는 가능하지만 좋은 코드는 아님

숫자 값은 Number 객체 래퍼로 박싱할 수 있기 때문에 Number.prototype 메서드로 접근할 수도 있다.
예를 들면 toFixed() 메서드는 지정한 소수점 이하 자릿수까지 숫자를 나타냄

예 )

var a = 42.59;

a.toFixed(0); // "43"
a.toFixed(1); // "42.6"
a.toFixed(2); // "42.59"
a.toFixed(3); // "42.590"
a.toFixed(4); // "42.5900"

큰 숫자는 보통 지수형으로 표시한다.

var onethousand = 1E3; // 1 10^3
var onemilliononehundredthousand = 1.1E6; // 1.1
* 10^6

2.3.2 작은 소수 값

다음은 널리 알려진 이진 부동 소수점 숫자의 부작용 문제다.

0.1 + 0.2 === 0.3; // false

수식만 보면 true지만 결과는 false다.
why? 이진 부동 소수점으로 나타낸 0.1과 0.2는 원래의 숫자와 일치하지 않고 둘을 더한 결과 역시 정확히 0.3이 아님

실제로는 0.30000000000000000000000004에 가깝지만, 같은 것은 아니다.

그렇다면 이런 방법을 해결하기 위해서는 어떻게 비교해야 할까?

  • 일반적으로 미세한 '반올림 오차'를 허용 공차로 처리하는 방법
    ES6부터는 Number.EPSILON으로 정의되어 있으므로 필요시 사용하면 됨

    if(!Number.EPSILON){
    Number.EPSILON = Math.pow(2, -52);
    }

    function numbersCloseEnoughToEqual(n1, n2){
    return Math.abs( n1 - n2) < Number.EPSILON;
    }

    var a = 0.1 + 0.2;
    var b = 0.3;

    numbersCloseEnoughToEqual( a, b); // true
    numbersCloseEnoughToEqual( 0.0000001, 0.0000002); // false





    참고도서
    You Don't Know JS (한빛미디어)
profile
어제의 나보다 나은 오늘의 내가 되자!🧗‍♂️

0개의 댓글

관련 채용 정보