자바스크립트 숫자형

kiki97 ㅣ 2022. 9. 14. 00:38

반응형

숫자를 입력하는 다양한 방법

1e3 = 1 * 1000
1.23e6 = 1.23 * 1000000
  • 'e'는 e왼쪽의 수에 e 오른쪽에 있는 수만큼의 10의 거듭제곱을 곱하는 효과가 있다.

 

let ms = 1e-6; // 1에서 왼쪽으로 6번 소수점 이동

// 10을 세 번 거듭제곱한 수로 나눔
1e-3 = 1 / 1000 (=0.001)

// 10을 여섯 번 거듭제곱한 수로 나눔
1.23e-6 = 1.23 / 1000000 (=0.00000123)
  • 'e' 우측에 음수가 있으면, 이 음수의 절댓값만큼 10을 거듭제곱한 수로 나누는 것을 의미한다.

 

toString(base)

let num = 255;

alert( num.toString(16) );  // ff
alert( num.toString(2) );   // 11111111
  • num.toString(base) 메서드는 base 진법으로 num을 표현한 후, 이를 문자형으로 변환해 반환한다.
  • base는 2에서 36까지 쓸 수 있는데, 기본값은 10이다.
  • base=16 : 16진수 색, 문자 인코딩 등을 표현할 때 사용한다. 0부터 9, 10이상의 수는 A부터 F를 사용
  • base=2 : 비트 연산 디버깅에 주로 사용한다. 숫자 0 또는 1이 될 수 있다.

 

alert( 123456..toString(36) ); // 2n9c
  • base=36 : 0..9와 A..Z를 사용해 숫자를 표현한다.
    36베이스는 url을 줄이는것과 같이 숫자로 된 긴 식별자를 짧게 줄일 때 유용하다.

 

123456..toString(36)

(123456).toString(36)
  • 숫자를 대상으로 메서드 toStirng을 직접 호출하고 싶다면 숫자 다음에 점 두 개를 붙여야 한다.
  • (123456).toString(36) 방법도 가능하다.

 

어림수 구하기

Math.floor() 소수점 첫째 자리에서 내림(버림) 3.1은 3, -1.1은 -2

Math.ceil() 소수점 첫째 자리에서 올림 3.1은 4, -1.1은 -1

Math.trunc() 소수부를 무시 3.1은 3, -1.1은 -1

 

소수n번째에서 어림수 구하기

let num = 1.23456;

alert( Math.floor(num * 100) / 100 ); // 1.23456 -> 123.456 -> 123 -> 1.23
  • 곱하기와 나누기를 이용

 

let num = 12.34;
alert( num.toFixed(1) ); // "12.3"

num = 12.36;
alert( num.toFixed(1) ); // "12.4"

num = 12.34;
alert( num.toFixed(5) ); // "12.34000", 소수부의 길이를 5로 만들기 위해 0이 추가되었습니다.
  • 소수점 n 번째 수의까지의 어림수를 구한 후 이를 문자형으로 반환해주는 메서드 toFixed(n) 사용

 

소수의 정밀도 손실

alert( 0.1 + 0.2 == 0.3 ); // false

alert( 0.1 + 0.2 ); // 0.30000000000000004
  • 숫자는 0과 1로 이루어진 이진수로 변환되어 연속된 메모리 공간에 저장이 된다.
  • 2진법을 사용해 0.1 또는 0.2를 정확하게 저장하는 방법은 없다. (무한 소수가 됨)

 

alert( 0.1.toFixed(20) ); // 0.10000000000000000555
  • IEEE-754 에선 가능한 가장 가까운 숫자로 반올림하는 방법을 사용해 이런 문제를 해결하는데,
    '작은 정밀도 손실'을 우리가 볼 수는 없지만 실제로 손실은 발생한다.
  • 또한 두 숫자를 합하면 '정밀도 손실'도 더해진다.

 

isNaN과 isFinite

두 특수 숫자는 숫자형에 속하지만 '정상적인' 숫자는 아니기 때문에, 숫자와 구분하기 위한 특별한 함수가 존재한다.

Infinity와 -Infinity – 그 어떤 숫자보다 큰 혹은 작은 특수 숫자 값

NaN – 에러를 나타내는 값

alert( isNaN(NaN) ); // true
alert( isNaN("str") ); // true

alert( NaN === NaN ); // false
  • isNaN(value) – 인수를 숫자로 변환한 다음 NaN인지 테스트함
  • NaN은 NaN자기 자신을 포함하여 그 어떤 값과도 같지 않다.

 

alert( isFinite("15") ); // true
alert( isFinite("str") ); // false, NaN이기 때문입니다.
alert( isFinite(Infinity) ); // false, Infinity이기 때문입니다.
  • isFinite(value) : 인수를 숫자로 변환하고 변환한 숫자가 NaN/Infinity/-Infinity 아닌 일반 숫자인 경우 true
  • 빈 문자열이나 공백만 있는 문자열은 isFinite를 포함한 모든 숫자 관련 내장 함수에서 0으로 취급된다.

 

parseInt와 parseFloat

alert( parseInt('100px') ); // 100
alert( parseFloat('12.5em') ); // 12.5

alert( parseInt('12.3') ); // 12, 정수 부분만 반환됩니다.
alert( parseFloat('12.3.4') ); // 12.3, 두 번째 점에서 숫자 읽기를 멈춥니다.
  • 두 함수는 불가능할 때까지 문자열에서 숫자를 '읽습니다'.
  • 숫자를 읽는 도중 오류가 발생하면 이미 수집된 숫자를 반환한다.
  • parseInt는 정수, parseFloat는 부동 소수점 숫자를 반환, 읽을 숫자가 없을 때는 NaN 반환

 

내장 객체 Math

Math.random() 0과 1사이의 난수를 반환(1은 제외)

Math.max(a, b, c...) / Math.min(a, b, c...) 인수 중 최대/최소 값 반환

Math.pow(n, power) n을 power번 거듭제곱한 값을 반환

 

예제)

alert( Math.random() ); // 0.1234567894322
alert( Math.random() ); // 0.5435252343232
alert( Math.random() ); // ... (무작위 수)

alert( Math.max(3, 5, -10, 0, 1) ); // 5
alert( Math.min(1, 2) ); // 1

alert( Math.pow(2, 10) ); // 2의 10제곱 = 1024
  • 이 외에도 다양한 함수와 상수가 Math에 있다.
반응형