PHP에서 BIGINT 표현하는 방법
- Thursday, June 18, 2009, 15:10
- Articles, PHP
- 188 views
- Add a comment
MySQL 에는 BIGINT 형이 있습니다. BIGINT 의 값의 범위는 총 64비트로 Signed 인 경우
-9223372036854775808 에서 9223372036854775807 까지 이고,
Unsiged 인 경우 0부터 18446744073709551615 까지 입니다.
반면 PHP의 INT 형은 값의 범위는 총 32비트로 –2147483647 부터 +2147483647 까지이며 Unsigned 인 경우 0부터 4294967295 까지 입니다.
PHP 는 값이 INT 범위를 넘어서는 경우 변수를 Float 형으로 변경합니다.
1: <?php2: $i = 2147483647 ;3: var_dump($i);4:5: $i = 2147483647 + 1 ;6: var_dump($i);7: ?>
결과
int(2147483647)
float(2147483648)
float 은 사실상 double 형이라고 볼 수 있기 때문에 BIGINT 와 같은 64비트의 값을 가질 수 있습니다.
문제는 일정 값 이상이 되면 아래와 같이 지수표현 법으로 출력됩니다.
1: <?php2: $i = 5820061110073302;3: echo $i;4: ?>
출력
5.8200611100733E+15
간단하게 생각하면 INT 범위를 넘어가는 $i 를 문자열로 바꾸면 제대로 출력될 수도 있을 것 같습니다. 그러나 아쉽게도 그렇지 않습니다.
1: <?php2: $i = 5820061110073302;3: $str = "$i";4: echo $str;5: ?>
마찬가지로 출력은 5.8200611100733E+15 입니다.
Float 형으로 저장된 BIGINT 값을 자수표현 법이 아닌 정수표현으로 출력하고 싶다면 아래와 같이 할 수 있습니다.
1: <?php2: $i = 5820061110073302;3: $str = sprintf("%.0f",$i);4: var_dump($str);5: ?>
출력 결과
string(16) "5820061110073302"
앞서 `간단히` 생각해 봤던 방법처럼 sprintf 이용해서 Float 형의 값을 String 을 변경하였고 우리가 원했던 값의 형태로 출력할 수 있게 되었습니다.
About the Author
Write a Comment
Gravatars are small images that can show your personality. You can get your gravatar for free today!


