• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:キャストとprint文)

キャストとprint文

このQ&Aのポイント
  • キャストとprint文の使い方について質問があります。
  • 質問内容の元ネタは、PHPのコードです。
  • 具体的には、intvalとfloatvalの違いについて疑問があります。

質問者が選んだベストアンサー

  • ベストアンサー
  • sakusaker7
  • ベストアンサー率62% (800/1280)
回答No.1

使っているPHPのバージョンは幾つでしょう? わたしの手元の5.2.(幾つか)では、 <?php print(floatval("123")); print("\n"); print(floatval("1230")); print("\n"); print(floatval("12300")); print("\n"); print(floatval("123000")); print("\n"); print(floatval("1230000")); print("\n"); print(floatval("12300000")); print("\n"); print(floatval("123000000")); print("\n"); print(floatval("1230000000")); print("\n"); print(floatval("12300000000")); print("\n"); を出力させると 123 1230 12300 123000 1230000 12300000 123000000 1230000000 12300000000 となります。 んで、php.iniに ; The number of significant digits displayed in floating point numbers. precision = 14 てのがあるですが、ここの数字を適当に小さくしてやると(下の例では6) 123 1230 12300 123000 1.23E+006 1.23E+007 1.23E+008 1.23E+009 1.23E+010 となりました。 で、なぜ質問にある例の3、4で違うのかですが、 ざっと見たところPHP4では >print(floatval("1200000")); こちらの場合は問答無用で %6G というsprintfの書式を使っているっぽいです。 一方 >print(floatval("1200000") . "\n"); こちらの場合だと、 floatval("120000")をdouble型に変換するのは同じなんですが、 その後で "\n" と連結するために再度文字列へと変換します。 このとき、3で使った変換関数とは違うので 結果が違うということになっているようです。 PHP5だと両者で同じ関数を使っているようなので、 php.iniの設定がそれなりの数字になっていれば、 1.2E+6のような結果にはならないと思います。 iniファイルを書き換える以外にこの値を買える手段ってあるのですかね?

himajin100000
質問者

補足

PHP v6.0.0 snapshot 200803200630 ; The number of significant digits displayed in floating point numbers. precision = 12 ==========回答してもらったコードの実行結果============== 123 1230 12300 123000 1230000 1.23E+7 1.23E+8 1.23E+9 1.23E+10 #ちょっと今テキストエディタでトラブル発生中で、何らかのソースを書くのに難儀しているので補足簡潔になってます。 #書式指定子 Gも調べないと。 #>こちらの場合は問答無用で %6G というsprintfの書式を使っているっぽいです。 どこかでこの仕様が説明されている文献無いかな? jp2.php.netあたり見てもなかったような。 C言語のソース読まないと駄目かな・・・

すると、全ての回答が全文表示されます。

その他の回答 (1)

  • sakusaker7
  • ベストアンサー率62% (800/1280)
回答No.2

> #>こちらの場合は問答無用で %6G という > sprintfの書式を使っているっぽいです。 > どこかでこの仕様が説明されている文献無いかな? > jp2.php.netあたり見てもなかったような。 > C言語のソース読まないと駄目かな・・・ もちろん先にそれを探したんですが、今のところは見つかってないです。 で、ソースをざっと見た結果ですんで、ひょっとしたら読み違えているかもしれません。 >PHP v6.0.0 snapshot 200803200630 PHP6っすか。 それはノーマーク(^^;

すると、全ての回答が全文表示されます。

関連するQ&A