본문 바로가기
Front-End/Javascript

javascript 기초부시기 - 데이터 타입 - number

by kimik 2022. 5. 11.

1. number

다른언어에서는 다양한 숫자타입이 존재하는 반면, 자바스크립트에서는 숫자관련 타입이 number와 bigint두가지입니다.

(bigint는 추후 다루겠습니다.)

 

1.1 number타입의 최대값 최소값

number타입이 표현할 수 있는 최대값은 1.7976931348623157e+308이며,

반대로 최소값은 -1.7976931348623157e+308입니다.

 

1.2 2, 8, 16진수 처리

var integer = 10;        // 정수
var double = 10.12;      // 실수
var negative = -20;      // 음의 정수
var binary = 0b01000001; // 2진수
var octal = 0o101;       // 8진수
var hex = 0x41;          // 16진수

// 표기법만 다를뿐 같은 값이다.
console.log(binary === octal); // true
console.log(octal === hex);    // true

2진수, 7진수, 16진수에 대한 데이터 타입이 별도로 없기 때문에 모두 10진수로 해석되어 저장됩니다.

 

1.3 number는 모두 실수

console.log(1 === 1.0); //true

또한 자바스크립트는 정수만을 위한 타입이 없기 때문에 전부 실수(수학적 의미의 실수는 유리수와 무리수를 통틀은 말이지만, 프로그래밍언어에서의 실수는 일반적으로 소수를 가르킨다고한다)이다.

 

1.4 number 타입의 특별한 3가지 값

var pInf = 10 / 0;  // 양의 무한대
console.log(pInf);  // Infinity

var nInf = 10 / -0; // 음의 무한대
console.log(nInf);  // -Infinity

var nan = 1 * 'string'; // 산술 연산 불가
console.log(nan);       // NaN

number의 최대값을 초과하거나 위의 코드와같이 무한한 값을 표현하면 Infinity(양의 무한대)로 표시되며,

마찬가지로 최소값보다 낮은값 혹은 위의 코드와 같이 무한한 코드를 표현하면 -Infinity(음의 무한대)로 표시됩니다.

NaN은 number타입과 string을 계산하거나 boolean값과 string을 연산하는 등 연산이 불가할때 표시됩니다.

 

1.5 number타입의 소수 버그

console.log(0.1 + 0.2) //0.30000000000000004

자바스크립트에서 소수점 연산을 하면, 위의 코드와 같이 의도치않은 결과가 나오는 경우가 있다.

원인은 자바스크립트를 계산할때 10진법으로 된 숫자를 2진법으로 변환하고, 그과정에서 몇몇 소수는 무한소수가 되어버리는데 컴퓨터 메모리는 그 무한소수를 다 담지못하고 중간을 잘라 유한소수로 저장해버린다. 그리고 그 값을 다시 10진법으로 바꾸기 때문에 위와같은 문제가 발생한다. 

 

1.5.1 곱셈으로 해결

console.log((0.1 * 10 + 0.2 * 10) / 10;) //0.3

간단하게 해당 소수들을 정수의 값이 되도록 곱셈하고 그 값만큼 결과값을 나눠주는 방법

 

1.5.2 toFixed()를 활용

console.log(Number((0.1+0.2).toFixed(1))) //0.3

toFixed메소드를 활용하여 소수점의 길이를 제한하는 형식입니다. toFixed의 결과값은 string이므로 number타입으로 변환해줘야합니다.

 

1.5.3 Math round, ceil, floor 활용

Math.round((0.1+0.2)*10)/10; //0.3

상황에 따라 반올림/올림/내림을 위한 Math 메소드를 활용하여 처리합니다.

 

출처: https://poiemaweb.com/js-data-type-variable

댓글