[PHP-users 31518] Re: strvalの仕様

Kenji Abe kenji.ml @ gmail.com
2007年 2月 22日 (木) 00:51:48 JST


安部と申します。

> 数十兆オーダーの整数をアラビア数字で(指数表現でなく)扱いたいのですが、
> 環境によって strval 関数の挙動が異なり、難儀しています。

いろいろな方がいろいろな環境での結果を報告してくださっていて
それは参考になりますが、具体的に「どのように挙動が異なり」
「どのように難儀」されているのかを先に提示されたほうが、解決が
早いのではないかな、と思います。

私はPHPのソースを読んだわけでもないですし、それほど詳しいわけでも
ないですが、今回の件ではint長やintval()は関係ないのではないかな、
と思います。

こちらの環境で試したところ、 1234567890000 は double として
パースされているようです。(マニュアルでは float??)

echo gettype(1234567890000);
// double

また、型が string 以外の変数を echo で出力する際には、
自動的にく strval() と同様に変換されるようです。

PHP: 文字列 - Manual
http://jp2.php.net/manual/ja/language.types.string.php
「文字列への変換」


なので、目的を考えると

$x = 1234567890000 + 1;
echo strval($x);

というのは、

echo 1234567890001;

でよいかもしれません。
(double でパースされ、strval() で自動変換される??)


いろいろな方のご報告を見ると、double 型の変数を
strval() で文字列に変換したときに、指数表記に変換される
最低桁数が環境によって違うようですが、それを確認されたいと
いうことでしょうか。


echo 1234567890001;
が

環境1)
1234567890001

環境2)
1.23456789E+12

というような感じだと思いますが、疑問点がはっきりすると
もっと詳しい方からご意見をいただけるのではないかな、と思います。


# PHP 5.1.5
# CentOS 4.4



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