[PHP-users 31509] strvalの仕様

papa pahoo papa @ pahoo.org
2007年 2月 21日 (水) 21:06:33 JST


パパぱふぅです。

数十兆オーダーの整数をアラビア数字で(指数表現でなく)扱いたいのですが、
環境によって strval 関数の挙動が異なり、難儀しています。
とりあえず自前の strval 関数を用意して回避したのですが、単純に int 長が 
32 ビット/64ビットの違いというわけではないようで、どうも腑に落ちません。

そこで、お手数なのですが、お手持ちのPHP環境で下記のプログラムを動かして、
画面に表示された結果を教えていただけませんでしょうか。

また、strval関数の仕様/制限に関する情報や、「それは別の原因」ということ
をご存じの方がいましたら、ぜひお知らせ下さい。

----------------------------------
<?php
echo "PHP_INT_SIZE=" . constant("PHP_INT_SIZE") . "<br />\n";
echo "PHP_VERSION=" . constant("PHP_VERSION") . "<br />\n";
echo "PHP_OS=" . constant("PHP_OS") . "<br />\n";
$x[0] = 12345678900 + 1;
$x[1] = 123456789000 + 1;
$x[2] = 1234567890000 + 1;
$x[3] = 12345678900000 + 1;
foreach ($x as $i=>$val) {
    echo "x[$i]=" . $val . "<br />\n";
    echo "intval(x[$i])=" . intval($val) . "<br />\n";
    echo "strvall(x[$i])=" . strval($val) . "<br />\n";
}
?>
-----------------------------------
ちなみにウチの環境では――

PHP_INT_SIZE=4
PHP_VERSION=4.4.4
PHP_OS=Linux
x[0]=12345678901
intval(x[0])=-539222987
strvall(x[0])=12345678901
x[1]=123456789001
intval(x[1])=-1097262583
strvall(x[1])=123456789001
x[2]=1234567890001
intval(x[2])=1912276049
strvall(x[2])=1234567890001
x[3]=12345678900001
intval(x[3])=1942891297
strvall(x[3])=12345678900001

==========================
  パパぱふぅ
  http://www.pahoo.org/
==========================



PHP-users メーリングリストの案内