프로그래밍/JavaScript

[JavaScript Core] 숫자형에 대해 자세히 알아보자

문_성 2023. 11. 10. 04:54
반응형


이번에는 자바스크립트의 숫자형에 대해서 자세하게 알아보도록 하겠습니다.

숫자형은 말 그대로 숫자인 자료형이며, 자바스크립트를 처음 배우기 시작할 때, 가장 먼저 배우는 자료형 중 하나입니다.

따라서, 이러한 기본적인 자료형을 더욱 깊이 파고들어 자세히 알아보도록 합시다.



1. 숫자형의 다양한 모습


let num1 = 100000000;
let num2 = 1e8;

console.log(num1 == num2); // true


위의 num1 변수는 숫자 1억을 담고 있습니다.

1억은 0이 8개이므로 1과 8개의 0을 차례대로 써주면 되지만, 그러기엔 0이 더 많아질수록 귀찮은 작업이 되고, 숫자의 크기를 알아보기 힘들어집니다.

따라서, 0을 나열하는것이 아닌 1e[0의 개수] 형식으로 대신 나타낼 수 있습니다.

예로, 10억을 나타내고 싶으면 1e9 가 되는 것이죠.

let num1 = 0.0000001;
let num2 = 1e-7;

console.log(num1 == num2); // true


반대로, 소수점을 나타내고 싶으면 1e-[0의 개수] 형식으로 나타낼 수 있습니다.

매번 큰 숫자나 작은 숫자를 일일이 0을 타이핑하면서 나타낼 필요없이, 위의 방법을 이용해서 간단하게 나타내면 됩니다.

let num1 = 255;
let num2 = 0xff; // 16진수
let num3 = 0o377; // 8진수
let num4 = 0b11111111; // 2진수

console.log(num1 == num2); // true
console.log(num1 == num3); // true
console.log(num1 == num4); // true


이외에도, 위와 같이 한 숫자를 여러가지 진법으로도 나타낼 수 있습니다.

기본적으로 우리는 10진수를 사용하고, 자바스크립트도 별도의 기호나 연산 없이 숫자를 입력할 시 10진수로 받아드립니다.

let num1 = 255;

console.log(num1.toString(16)); // 'ff'
console.log(parseInt('ff', 16)); // 255


우리가 직접 진법변환을 할 필요없이, toString(진법) 메소드를 통해 해당 인자의 진법으로 변환할 수 있고

parseInt(숫자, 진법) 메소드를 통해, 첫번째 인자를 두번째 인자인 진법으로 해석하여 다시 10진법의 수로 되돌릴수도 있습니다.




2. 어림수 구하기


이번에는 우리가 흔히 말하는 올림, 버림, 반올림과 같은 어림수를 구하는 것에 대해 알아봅시다.


console.log(Math.floor(3.1)); // 3
console.log(Math.ceil(3.1)); // 4
console.log(Math.round(3.1)); // 3
console.log(Math.trunc(3.1)); // 3


각각
Math.floor 메소드는 내림,
Math.ceil 메소드는 올림,
Math.round 메소드는 반올림,
Math.trunc 메소드는 버림
을 수행합니다.


console.log(3.12.toFixed(1)); // 3.1
console.log(3.12.toFixed(5)); // 3.12000


Math.round 와 비슷한 역할을 수행하는 toFixed 메소드도 있습니다.

toFixed 메소드는 인자로 들어온 자릿수까지 반올림을 수행하며, 인자가 소수부의 길이보다 길다면, 그만큼 0을 채워넣어 문자열로 반환합니다.



3. 부정확한 계산



console.log(0.1 + 0.2 == 0.3); // false


위의 계산결과는 상식적으로 true 여야 하지만, 자바스크립트에선 false 입니다.

이유는, 프로그래밍을 하면서 한번쯤은 들어봤을 부동소수점 표기법 때문입니다.

숫자는 내부적으로 64비트의 저장공간을 할당받게 되며

  • 52비트는 숫자
  • 11비트는 소수점 아래 부분 (없으면 0)
  • 1비트는 부호


와 같이 비트가 할당되어 저장하는 방법을 부동소수점 표기법이라고 합니다.

그리고, 소수는 2진수로 나타내었을 때, 무한소수가 되므로 완벽하게 값 자체를 나타낼 수 없게 되는 것이죠.

따라서, 소수 그 자체나 소수간의 덧셈, 뺄셈같은 연산은 정확하지 않게 됩니다.

(자바스크립트 뿐만 아니라, Java, C 등의 언어에서도 똑같이 겪는 문제이니 잘 참고하시길 바랍니다.)



4. 그 외의 함수나 메소드



console.log(isNaN(1)); // false
console.log(isNaN("dasa")); // true

console.log(isFinite(1)); // true
console.log(isFinite(Infinity)); // false


isNaN 함수는 인자를 숫자로 변환했을 시에, NaN 인지 아닌지 유무를 반환하는 메소드이고,

isFinite 함수는 인자를 숫자로 변환했을 시에, NaN or Infinity or -Infinity 이면 false 를 반환하고, 그 외에는 true 를 반환합니다.



이렇게, 숫자형에 대해서 자세히 알아보았는데, 당장 실무나 내 코드에 적용할 내용은 아니더라도 기초와 기본 개념을 다지고, 후에 사소한 부분을 신경써서 프로그래밍을 하는 일이 생겼을 때 이런 상세한 지식들은 도움이 많이 될 것이라고 생각합니다.

따라서, 다시한번 되새기면서 꼭 기억하셨으면 좋겠고, 다음에 올라올 글들도 많은 관심 부탁드립니다!

반응형