JSON Number 타입의 안전한 한계값

Created:
Updated:

Number 타입의 안전한 한계값

JSON의 Number Type에 9007199254740992 + 1 이상을 입력하면 제대로 표시하지 못하는 수가 발생했다.

9007199254740993을 넣게되면 9007199254740992로 출력
9007199254740994를 넣게되면 정상적으로 9007199254740994로 출력
9007199254740995를 넣게 되면 9007199254740996으로 출력

즉 제대로 표시되는 수도 있지만 의도대로 나오지 않는 수도 발생했다.

Number.MAX_SAFE_INTEGER를 확인하면9007199254740991가 나오는데 테스트해보니9007199254740992까지는 값이 Number에 정상적으로 들어갔다.
그래도 상수로 정의되어있는Number.MAX_SAFE_INTEGER값인9007199254740991를 사용하는게 제일 안전할 것 같다.

9007199254740992값은 2^53이다.

2의 0~60 제곱

2의 거듭제곱을 나열해 보았다.

거듭제곱
2의 0 (2^0) 1
2의 1 (2^1) 2
2의 2 (2^2) 4
2의 3 (2^3) 8
2의 4 (2^4) 16
2의 5 (2^5) 32
2의 6 (2^6) 64
2의 7 (2^7) 128
2의 8 (2^8) 256
2의 9 (2^9) 512
2의 10 (2^10) 1024
2의 11 (2^11) 2048
2의 12 (2^12) 4096
2의 13 (2^13) 8192
2의 14 (2^14) 16384
2의 15 (2^15) 32768
2의 16 (2^16) 65536
2의 17 (2^17) 131072
2의 18 (2^18) 262144
2의 19 (2^19) 524288
2의 20 (2^20) 1048576
2의 21 (2^21) 2097152
2의 22 (2^22) 4194304
2의 23 (2^23) 8388608
2의 24 (2^24) 16777216
2의 25 (2^25) 33554432
2의 26 (2^26) 67108864
2의 27 (2^27) 134217728
2의 28 (2^28) 268435456
2의 29 (2^29) 536870912
2의 30 (2^30) 1073741824
2의 31 (2^31) 2147483648
2의 32 (2^32) 4294967296
2의 33 (2^33) 8589934592
2의 34 (2^34) 17179869184
2의 35 (2^35) 34359738368
2의 36 (2^36) 68719476736
2의 37 (2^37) 137438953472
2의 38 (2^38) 274877906944
2의 39 (2^39) 549755813888
2의 40 (2^40) 1099511627776
2의 41 (2^41) 2199023255552
2의 42 (2^42) 4398046511104
2의 43 (2^43) 8796093022208
2의 44 (2^44) 17592186044416
2의 45 (2^45) 35184372088832
2의 46 (2^46) 70368744177664
2의 47 (2^47) 140737488355328
2의 48 (2^48) 281474976710656
2의 49 (2^49) 562949953421312
2의 50 (2^50) 1125899906842624
2의 51 (2^51) 2251799813685248
2의 52 (2^52) 4503599627370496
2의 53 (2^53) 9007199254740992
2의 54 (2^54) 18014398509481984
2의 55 (2^55) 36028797018963968
2의 56 (2^56) 72057594037927936
2의 57 (2^57) 144115188075855872
2의 58 (2^58) 288230376151711744
2의 59 (2^59) 576460752303423488
2의 60 (2^60) 1152921504606846976

Comments