Recent posts

Recent comments

Archive

Calender

«   2024/03   »
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
31

[ Javascript ] Number.isSafeInteger() , Number.MAX_SAFE_INTEGER , Number.MIN_SAFE_INTEGER



<script type="text/javascript">
// 출처 : Number.isSafeInteger() ─ MDN 
if ( ! Number.MAX_SAFE_INTEGER ){ 
        Number.MAX_SAFE_INTEGER = Math.pow( 2 , 53 ) - 1; 
        Number.MIN_SAFE_INTEGER = -Number.MAX_SAFE_INTEGER; 
} 
if ( ! Number.isInteger ){ 
    Number.isInteger = function isInteger ( value ) {  return typeof value === "number" && isFinite(value) && Math.floor(value) === value;  }; 
} 
if ( ! Number.isSafeInteger ){ 
    Number.isSafeInteger = function isSafeInteger ( value ) {  return Number.isInteger(value) && Math.abs(value) <= 9007199254740991;  }; 
} 
</script>


자바스크립트에서 정수는 -(253 - 1) 부터 +(253 + 1) 까지의 수만 사용할 수 있다.
즉, -9007199254740991부터 9007199254740991까지
이 범위 안에서만 정확한 정수의 값을 가져올 수 있다는 말이다.

이 범위를 벗어난 정수에 대해서는,
짝수(even number)일 경우에는 정확한 값을 가져올 수 있지만,
홀수(odd number)일 경우에는 엉뚱한 값이 나올 수 있다.

따라서, 정확한 계산을 할 수 있는 정수인지를 체크할 필요가 있다.
바로 이 경우에 사용되는 함수가 isSafeInteger()이다.


<p id="demo1">  </p>
<p id="demo2">  </p>

<script type="text/javascript">

var max = Math.pow( 2, 53 ) - 1; 
var min = -max; 

demo1.innerHTML = max; 
demo2.innerHTML = min; 

</script>
<p id="demo1">  </p>
<p id="demo2">  </p>

<script type="text/javascript">

var max = Number.MAX_SAFE_INTEGER; 
var min = Number.MIN_SAFE_INTEGER; 

demo1.innerHTML = max; 
demo2.innerHTML = min; 

</script>

아래의 버튼을 반복해서 클릭해본다면, 무슨 뜻인지를 알 수 있을 것이다.


9007199254740991 +   =  
9007199254740991 +   =  

-9007199254740991 -   =  
-9007199254740991 -   =  

 
<p id="demo">
    9007199254740991 + <span></span> = <span></span> <br />
    9007199254740991 + <span></span> = <span></span> <br />

    -9007199254740991 - <span></span> = <span></span> <br />
    -9007199254740991 - <span></span> = <span></span> <br />
</p>

<button onclick="testing()"> 클릭하세요 </button>

<script type="text/javascript">
var tags = demo.getElementsByTagName( "span" ); 

var max = Math.pow( 2, 53 ) - 1; 
var min = -max; 

var a = -2, b = 0, x = 0, array; 

function testing (){ 

    a = a + 2; 
    b = a + 1; 

    array = [ a, max + a, b, max + b,   a, min - a, b, min - b ]; 

    for ( x = 0; x < array.length; x++ ){     tags[ x ].innerHTML = array[ x ];     } 
} 
</script>
 

9007199254740991 -  
-9007199254740991 +  

 
<p>
    9007199254740991 - <span id="demo1"></span> <br />
    -9007199254740991 + <span id="demo2"></span>
</p>

<button onclick="testing()"> 클릭하세요 </button>

<script type="text/javascript">
var max = Number.MAX_SAFE_INTEGER; 
var min = Number.MIN_SAFE_INTEGER; 

var x = 0, subtract = 0, add = 0; 

function testing (){ 
    x++; 

    subtract = max - x; 
          add = min + x; 

    demo1.innerHTML = x + " = " + subtract; 
    demo2.innerHTML = x + " = " + add; 
} 
</script>
 


isSafeInteger() 함수를 실행한 결과는,
정확한 계산이 가능한, 안전한 정수(safe integer)이라면 true, 그렇지 않다면 false이다.

 
<p id="demo1">  </p>
<p id="demo2">  </p>

<script type="text/javascript">

var number1 = 85749213; 
var number2 = 9008007006005004; 

demo1.innerHTML = Number.isSafeInteger( number1 ); 
demo2.innerHTML = Number.isSafeInteger( number2 ); 

</script>
 




Number.isSafeInteger( Infinity ) 
Number.isSafeInteger( -Infinity ) 
 
Number.isSafeInteger( NaN ) 
 
Number.isSafeInteger( true ) 
Number.isSafeInteger( false ) 
Number.isSafeInteger( 1 ) 
Number.isSafeInteger( 0 ) 
 
Number.isSafeInteger( "" ) 
Number.isSafeInteger( null ) 
Number.isSafeInteger( undefined ) 


이 내용이 도움이 되셨다면, 아래의 하트 버튼을 눌러주세요. *^^*