Number 객체

Ji Hyeok Im·2023년 3월 4일
0

Javascript

목록 보기
9/17

숫자 처리 시의 오차

JavaScript에서 모든 숫자는 IEEE 754 국제 표준에서 정의한 64비트 부동 소수점 수로 저장된다.

64비트 부동 소수점 수의 정밀도의 유효성은 정수부 15자리, 소수부는 17자리까지만 보장된다.

위의 예제에서 변수 x 값은 999999999999999 (15개의 9)로 제대로 출력되지만,

변수 y는 정수부가 16자리로 유효 범위를 넘어 출력 결과

10000000000000000 17개의 정수부로 처리되는 것을 확인할 수 있다.

소수부의 경우를 보면,

0.3을 직접 변수에 대입해서 출력한 경우 제대로 출력되지만,

var z 에 a + b 를 대입해서 출력 한 결과는 0.30000000000000004 로

오차가 발생함을 확인할 수 있다.

이러한 오차 발생은 JavaScript만의 문제는 아니고,

부동 소수점 수를 가지고 실수를 표현하는 모든 프로그래밍 언어에서 발생하는 문제이다.

오차를 처리하는 방법

정수의 형태로 먼저 변환해서 계산을 수행하고 다시 실수 형태로 재변환하는 방법을 사용할 수 있다.

실행 결과 : 0.3

소수 형태인 변수 a1, b1에 10을 곱해 정수 형태로 만들고

계산 수행 후 다시 10으로 나눠 변수 z1에 대입하고 그 값을 출력하면

0.3으로 오차 없이 출력되는 걸 확인할 수 있다.

진법 변환 : toString()

숫자 형태의 리터럴에 toString() 메서드를 사용하여

해당 숫자를 여러 형태의 진법으로 변환할 수 있다.

헤당 숫자의 진법을 실제로 바꿔주는 것은 아니고,

전달된 진법으로 변환한 형태의 숫자를 문자열 형태로 출력하는 것 뿐이다.

null, undefined, NaN, Infinity

혼동하기 쉬운 4가지 개념의 각 문맥에서의 값을 정리한다.

  • null : object 타입, 아직 '값'이 정해지지 않았음을 의미
  • undefined : undefined 자체로서 하나의 타입. '타입'이 정해지지 않았음을 의미.
  • NaN : Not a Number. number 타입으로서 '숫자가 아님'을 의미하는 숫자.
  • Infinity : number 타입. 무한대를 의미.

Boolean 변환시 0이 아닌 모든 숫자는 true 값을 갖는다.

Infinity는 number 타입이면서 0이 아니기 때문에 true.

Number 변환시 null 과 undefined 의 값 다름을 주의.

String 변환시 문자열로 변환되어 그대로 출력된다.

Number 객체

new Number("숫자로 된 문자열");, new Number(true 또는 false);

수를 사용할 때 new 연산자를 사용해서 명시적으로 Number 객체를 생성할 수 있다.

Number 객체는 숫자 값을 감싸고 있는 래퍼(Wrapper) 객체이다.

객체이기 때문에 type은 object 임에 주의.

Number 객체의 메서드

var myNum = new Number(인수); 형태의 코드로

숫자값을 Number 객체에 저장해야 메서드를 사용할 수 있다.

toFixed()

숫자.toFixed(), 숫자.toFixed(정수 인수)

소수점 이하 (정수 인수 +1) 자리수에서 반올림 처리

toPrecision()

Number 인스턴스의 가수와 소수 부분을 합친 자릿수를 전달받은 값으로 고정한 후

그 값을 문자열로 반환한다.

numObj.toPrecision(전체자릿수)

인수가 없으면 인스턴스의 숫자를 그대로 문자열로 반환하고,

전달받은 값이 있으면 반올림해서 고정한 자릿수의 자리까지를 반환한다.

profile
Programming study

0개의 댓글