PHPリファレンス
UPDATE:2020年07月06日
PHP の 浮動小数点型(float) について
PHP4.3 PHP5 PHP7
1 Minute Note
- 浮動小数点型とは 小数点付きの数値 のこと
- 浮動小数点型の種類は スカラー型
- 浮動小数点型のチェックは is_float() 関数 で行う
- 浮動小数点型の値は 近似値 であり、7.6 は 7.5999999999 という値となる
php の 浮動小数点型 とは小数点付きの数値のことです。浮動小数点型の種類はスカラー型で、値は近似値であり、例えば、7.6 は 7.5999999999という値となります。
浮動小数点型とは
POINT
- 浮動小数点型とは 小数点付きの数値 のこと
- 浮動小数点型の種類は スカラー型
小数点付きの数値
浮動小数点とは小数点付きの数値のことです。 3.14 や 0.004 などです。
また、PHP の浮動小数点型は 0.015E2(0.015*10の2乗 で 1.5となります。)などの 指数形式の記法 にも対応しています。
1 2 3 4 5 6 7 8 9 10 11 | <!-- サンプルコード --> <?php $fNum = 1.1414; echo $fNum."<br />\n"; $fNum = 0.015e2; echo $fNum."<br />\n"; $fNum = 3E-4; echo $fNum."<br />\n"; ?> |
結果は
1.1414
1.5
0.0003
1.5
0.0003
となります。
浮動小数点型の精度
POINT
- 浮動小数点型の値は 近似値 であり、7.6 は 7.5999999999という値となる
精度14桁の近似値
浮動小数点型の大きさはプラットフォーム(PHP が稼働しているコンピューターなど)に依存しますが、1.8E-308から01.8E+308までの10進数で精度14桁となっています。(10進数 64ビット IEEE フォーマット)
浮動小数点型の値は 近似値 になります。7.6 は 7.5999999999 という値で表されます。つまり、浮動小数点数を正確な値で処理することを期待したコードを記述してはいけないということになります。
浮動小数点数の小数点以下30桁を number_format で表示してみましょう。
1 2 3 4 | <?php $iFloat = 0.7; echo '0.7は内部的に'.number_format($iFloat, 30)." となっています。<br />\n"; ?> |
結果は
0.7は内部的に0.699999999999999955591079014994 となっています。
となります。
従って、2つの浮動小数点値を == で比較する場合は、
1 2 3 4 5 6 | <?php $fNumA = 0.3; $fNumB = 0.3; if(($fNumA * 1000) === ($fNumB * 1000)) echo '小数点以下2桁までが等しい'; ?> |
という形で比較すれば、小数点以下2桁までが等しい、となります。
1 2 3 4 5 6 7 8 9 | <?php $a = 1.23456789; $b = 1.23456780; $epsilon = 0.00001; if(abs($a-$b) < $epsilon){ echo "小数点以下5桁までが等しい<br>\n"; } ?> |
結果は
小数点以下5桁までが等しい
となります。
浮動小数点型を調べる
POINT
- 浮動小数点型のチェックは is_float() 関数 で行う
浮動小数点型であるかどうかし調べるには、is_float()関数 を使用します。
1 2 3 4 5 | <!-- サンプルコード --> <?php $fValue = 1.1414; if(is_float($fValue ) === TRUE) echo '浮動小数点型です。'; ?> |
結果は
浮動小数点型です。
となります。
php is_float() 書式
bool TRUE か FALSE = is_float(mixed $var);
bool TRUE か FALSE = is_float(mixed $var);
説明 | 変数のデータ型が浮動小数点型かどうかチェックする | |
---|---|---|
引数 | mixed $var | データ型を調べる変数 |
返り値 | bool | 変数が浮動小数点型の場合:TRUE、変数が浮動小数点型ではない場合:FALSE |
サンプル
1 2 3 4 5 6 7 8 9 | <?php $isFloat = 3.14; echo is_float($isFloat) ? "浮動小数点型です。<br>\n" : "浮動小数点型ではありません。<br>\n"; //浮動小数点型です。 $notFloat = 'abc'; echo is_float($notFloat) ? "浮動小数点型です。<br>\n" : "浮動小数点型ではありません。<br>\n"; //浮動小数点型ではありません。 ?> |
データ型の種類
POINT
PHPには8種類のデータ型があります。文字列型、整数型、浮動小数点数型、論理型、配列型、オブジェクト型、リソース型、NULLです。そして、それらのデータ型は、スカラー型と複合型と特殊型に分けられます。 スカラー型は単一の値で作られている型です。文字列、整数、浮動小数点数、論理値がそれに当たります。 複合型(コレクション型)は複数の値で作られている型です。配列とオブジェクトがそれに当たります。 特殊型はリソースとNULLです。- PHPの8つのデータ型:
- PHPの3のデータ種類:
字列型(string)
整数型(integer)
浮動小数点数型(float)(double)
論理型(boolean)
配列型(array)
オブジェクト型(object)
リソース型(resource)
NULL(null)
(スカラー型)
(スカラー型)
(スカラー型)
(スカラー型)
(複合型)
(複合型)
(特殊型)
(特殊型)
スカラー型
(文字列型)
(整数型)
(浮動小数点数型)
(論理型)
複合型
(配列型)
(オブジェクト型)
特殊型
(リソース型)
(NULL)
データ型の表
型名 | 種類 | 例 | |
---|---|---|---|
文字列型 | string | スカラー型 | 'Hello World!!' "我思う、ゆえに我あり" |
整数型 | integer | スカラー型 | 1、2020、-588、+98 8進数 16進数 |
浮動小数点数型 | float(double) | スカラー型 | 1.4142、-0.18 |
論理型 | boolean | スカラー型 | TRUE | FALSE (true false) (大文字・小文字を区別しない) |
配列型 | array | 複合型 | array('name','address') |
オブジェクト型 | object | 複合型 | $oObj = new ClassName(); |
リソース型 | resource | 特殊型 | resource |
ヌル型 | null | 特殊型 | NULL | null | Null (大文字・小文字を区別しない) |
サンプルコード
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 | ・浮動小数点型:<br> <?php $fNum = 1.1414; echo $fNum."<br />\n"; $fNum = 0.015e2; echo $fNum."<br />\n"; $fNum = 3E-4; echo $fNum."<br />\n"; ?> <br><br> ・精度:<br> <?php $fNumA = 0.3; $fNumB = 0.3; if(($fNumA * 1000) === ($fNumB * 1000)) echo "小数点以下2桁までが等しい<br>\n"; ?> <br><br> ・精度:<br> <?php $a = 1.23456789; $b = 1.23456780; $epsilon = 0.00001; if(abs($a-$b) < $epsilon){ echo "小数点以下5桁までが等しい<br>\n"; } ?> <br><br> ・精度:<br> <?php $iFloat = floor((0.1+0.7)); echo 'floor((0.1+0.7)*10)は'.floor((0.1+0.7)*10)." となる。これは内部的には7.9999999999999991118...だからです。<br />\n"; $iFloat = 0.7; echo '0.7は内部的に'.number_format($iFloat , 30)." となっています。<br />\n"; ?> <br><br> ・浮動小数点型を調べる:<br> <?php $fValue = 1.1414; if(is_float($fValue) === TRUE) echo '浮動小数点型です。'; ?> <br><br> |
実行結果
・浮動小数点型:
1.1414
1.5
0.0003
1.1414
1.5
0.0003
・精度:
小数点以下2桁までが等しい
・精度:
小数点以下5桁までが等しい
・精度:
floor((0.1+0.7)*10)は7 となる。これは内部的には7.9999999999999991118…だからです。
0.7は内部的に0.699999999999999955591079014994 となっています。
・浮動小数点型を調べる:
浮動小数点型です。
タグ(=記事関連ワード)
日付
公開日:2017年3月18日
最終更新日:2020年07月06日
最終更新日:2020年07月06日
このカテゴリの他のページ
この記事へのコメント
トラックバックurl
https://wepicks.net/phpref-floattype/trackback/