PHPで大きい数値を比較する
phpの32bit環境で大きい数値を比較したい。
比較対象の数値データはデータベースに保存されていて、いくつかに分かれている。
それぞれの数値をSELECTで取得し、加算して比較する。
そのさい、
if ( intval( $num1 ) < intval( $num2 ) ) {
のようにintvalで「数値化」して比較していた。
上記のような状態でソースコードがあり、数値が大きくなったときに条件式がうまく動かない、というバグがあるらしい。
調べたら、intvalは数値をintとして変換するため、32bit環境では限界がある。
http://php.net/manual/ja/function.intval.php
比較しているのがbyte単位での数値だったので、KB/MB単位で比較するようにするか、GB単位ほどの比較であればfloatにキャストすればいいかなと思った。
<?php $num = '12345678901234'; var_dump( $num ); var_dump( intval( $num ) ); var_dump( (int)$num ); var_dump( (float)$num );
string(14) "12345678901234"
int(2147483647)
int(2147483647)
float(12345678901234)