JavaScript Tutorial.22

JS NUMBERS

  • JS에는 한가지 유형의숫자만 있다. 숫자는 소수를 포함하거나 포함하지 않을 수 있다.

  • 매우 크거나 작은 숫자들은 대수학적인 표현을 사용할 수 있다.

※ JS 숫자는 항상 64bit 부동 소수점이다.
다른 많은 프로그래밍 언어와 달리 JS는 정수, short, long 부동 소수점 등과 같은 다양한 유형의 숫자를 정의하지 않는다.
JS 숫자는 국제 IEEE 754 표준에 따라 항상 배정밀도 부동 소수점 숫자로 저장된다.
이 형식은 64bit로 숫자를 저장한다. 여기서 숫자(분수)는 비트0~51, 지수는 비트52~62, 부호는 비트63에 저장된다.

Value (aka Fraction/Mantissa)ExponentSign
52 bits (0 - 51)11 bits (52 - 62)1 bit (63)

Integer Precision

정수(마침표 또는 지수 표기가 없는 숫자)는 최대 15자리까지 정확하다.

※ 최대 소수 자릿수는 17.

Floating Precision

부동 소수점 산술이 항상 100% 정확한 것은 아니다.

이러한 문제를 해결하려면 곱셈과 나눗셈의 도움이 필요하다.

Adding Numbers and Strings

만약 두 숫자를 더한다면, 결과는 숫자형식이다.

let x=10
let y=20
let z=x+y //z=30

만약 두 문자열을 더한다면, 결과는 문자형식이다.

let x = "10";
let y = "20";
let z = x + y; // z='1020'

만약 숫자와 문자열 순서로 더한다면, 결과는 문자형식이다.

let x = 10;
let y = "20";
let z = x + y; //z='1020'

만약 문자열과 숫자 순서로 더한다면, 결과는 문자형식이다.

let x = '10';
let y = 20;
let z = x + y; //z='1020'

일반적인 실수는 아래 코드의 결과를 30으로 예상하는 것이다.

let x = 10;
let y = 20;
let z = "The result is: " + x + y; // z='The result is:1020'

일반적인 실수는 이 결과가 102030일 것으로 예상하는 것이다.

let x = 10;
let y = 20;
let z = "30";
let result = x + y + z; // result='3030'

NaN - Not a Number※ JS 인터프리터는 왼쪽에서 오른쪽으로 작동한다.
xy가 모두 숫자이기 때문에 처음 10 + 20이 추가된다.

Numeric Strings

JS 문자열에는 숫자 내용이 포함될 수 있다.

JS는 모든 숫자 연산에서 문자열을 숫자로 변환하려고 시도한다.

  • 아래 코드의 결과는 :
  • 아래 코드의 결과 또한 :
  • 아래 코드의 결과 또한22 :
  • 아래 코드의 결과 또한333 :

※ 마지막 예제에서 JS는 + 연산자를 사용하여 문자열을 연결한다.

NaN - Not a Number

NaN은 숫자가 유효한 숫자가 아님을 나타내는 JS 예약어다.
숫자가 아닌 문자열로 산술을 시도하면 NaN(숫자가 아님)이 된다 :

그러나 문자열에 숫자 값이 포함되어 있으면 결과는 숫자가 된다 :

전역 JS함수 isNaN()을 사용하여 값이 숫자가 아닌지 확인할 수 있다 :

NaN을 주의하자. 수학 연산에서 NaN을 사용하면 결과도 NaN이 된다 :

또는, 결과는 NaN5와 같은 연결일 수 있다 :

NaN은 숫자다. typeof NaN은 숫자를 반환한다 :

Infinity

Infinity(또는 -Infinity)는 가능한 가장 큰 수 이외의 수를 계산하는 경우 JS가 반환하는 값이다.
아래 코드로 myNumber 숫자를 JS에서 표한할 수 있는 최대치의 숫자 이사을 만들기 위해
반복해서 제곱 계산을 반복문이다. 결과와 같이 최대치를 넘어가면 INFINITY를 반환하였다.

<!DOCTYPE html>
<html>
<body>

<h2>JavaScript Numbers</h2>

<p>Infinity is returned if you calculate a number outside the largest possible number:</p>

<p id="demo"></p>

<script>
let myNumber = 2; 
let txt = "";
while (myNumber != Infinity) {
   myNumber = myNumber * myNumber;
   txt = txt + myNumber + "<br>"; // "<br>"는 줄 바꿈 break of line
}
document.getElementById("demo").innerHTML = txt;
</script>

</body>
</html>

0(Zero)로 나누기도 문한대를 생성한다 :

Infinity는 하나의 숫자이다. 그래서 typeof infinity는 숫자를 반환한다 :

Hexadecimal

JS는 상수 앞에 0x가 있으면 16진수로 해석한다.

※ 앞에 0이 들어가도록 숫자를 쓰면 안된다(예 : 07)
일부 JS 버전은 0으로 시작되는 숫자를 8진수로 해석한다.

기본적으로 JS는 숫자를 base 10(10진법)으로 표시한다.
그러나, toString()메서드를 사용하여 base 2(2진수)에서 base 36(36진수)로 숫자를 출력할 수 있다.
16진수는 base 16이다.
10진수는 base 10이다.
8진수는 base 8이다.
2진수는 base 2이다

JavaScript Numbers as Objects

일반적으로 JS숫자는 리터럴에서 생성된 기본 값이다.

그러나, 숫자는 키워드 new를 사용하여 객체로 정의할 수도 있다 :

타입은 숫자와 객체로 나뉜다.

※ Number(숫자) 객체를 생성하면 안된다.
new키워드는 코드를 복잡하게 만들고 실행 속도를 늦춘다.
숫자 객체는 예상치 못한 결과를 생성할 수 있다 :

숫자와 ==비교 결과 :

숫자와 ===비교 결과 :

=====의 차이점에 주목해야 하는데, 객체끼리의 비교는 항상 false를 리턴한다.

Complete JavaScript Number Reference

완전한 Number에 대한 참고는 아래 주소를 참조하자.
참조 사이트에는 모든 Number 속성 및 메서드에 대한 설명과 예시가 있다.
(참조 : https://www.w3schools.com/jsref/jsref_obj_number.asp)

좋은 웹페이지 즐겨찾기