자바스크립트의 숫자 타입은 number가 유일( 정수, 소수점 숫자 포함)
소수점 앞 정수가 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
다음은 널리 알려진 이진 부동 소수점 숫자의 부작용 문제다.
0.1 + 0.2 === 0.3; // false
수식만 보면 true지만 결과는 false다.
why? 이진 부동 소수점으로 나타낸 0.1과 0.2는 원래의 숫자와 일치하지 않고 둘을 더한 결과 역시 정확히 0.3이 아님
실제로는 0.30000000000000000000000004에 가깝지만, 같은 것은 아니다.
그렇다면 이런 방법을 해결하기 위해서는 어떻게 비교해야 할까?
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