PHP에서 BIGINT 표현하는 방법

MySQL 에는 BIGINT 형이 있습니다. BIGINT 의 값의 범위는 총 64비트로 Signed 인 경우
-9223372036854775808 에서 9223372036854775807 까지 이고,
Unsiged 인 경우 0부터 18446744073709551615 까지 입니다.

반면 PHP의 INT 형은 값의 범위는 총 32비트로 –2147483647 부터 +2147483647 까지이며 Unsigned 인 경우 0부터 4294967295 까지 입니다.

PHP 는 값이 INT 범위를 넘어서는 경우 변수를 Float 형으로 변경합니다.

  1: <?php
  2:     $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: <?php
  2:     $i = 5820061110073302;
  3:     echo $i;
  4: ?>

출력

5.8200611100733E+15

간단하게 생각하면 INT 범위를 넘어가는 $i 를 문자열로 바꾸면 제대로 출력될 수도 있을 것 같습니다. 그러나 아쉽게도 그렇지 않습니다.

  1: <?php
  2:     $i = 5820061110073302;
  3:     $str = "$i";
  4:     echo $str;
  5: ?>

마찬가지로 출력은 5.8200611100733E+15 입니다.

Float 형으로 저장된 BIGINT 값을 자수표현 법이 아닌 정수표현으로 출력하고 싶다면 아래와 같이 할 수 있습니다.

  1: <?php
  2:     $i = 5820061110073302;
  3:     $str = sprintf("%.0f",$i);
  4:     var_dump($str);
  5: ?>

출력 결과

string(16) "5820061110073302"

앞서 `간단히` 생각해 봤던 방법처럼 sprintf 이용해서 Float 형의 값을 String 을 변경하였고 우리가 원했던 값의 형태로 출력할 수 있게 되었습니다.

About the Author

ooti has written 46 stories on this site.

Write a Comment

Gravatars are small images that can show your personality. You can get your gravatar for free today!

Spam Protection by WP-SpamFree

Copyright © 2010 PHPK.org. All rights reserved.
Theme by Fitobochka and ComFi.com Phone Cards Company.