PHPの浮動小数点型(float/double)とは?
整数でなく小数点以下をもつ値を扱うには浮動小数点型(float/double)を用います。
浮動小数点の概念はとっても難しく数学的になってきますので、ほぼ使う機会がなさそうな部分は省いていきます。
PHPの浮動小数点型のルール・規則
- 3.1415のような小数点以下の値を格納する
- 正の整数はそのまま何もつけずに数値を記述
- 負の整数は-をつける
- 正の整数なら+は省略できる
- 3.1415e5のように指数表現も利用できる(3.1415×10の5乗)
- 最大値、最小値がある。(大きさは環境による)
※floatとdoubleと2つの種類があるのは過去の経緯によるものです。
かつては2種類存在し、格納する桁数に違いがありました。
しかし現在では同じものです。原則floatのほうで覚えてdoubleという同じものもあると覚えておいてください。
※最小値、最大値については定数PHP_FLOAT_MIN、PHP_FLOAT_MAXで出力することができますが、現在のコンピュータではとてつもなく大きな値なので意識する必要はほぼないでしょう。(参考)64bitのPCで最大値1.7976931348623E+308
PHPの浮動小数点型の代入(宣言)
$number = 3.14; //浮動小数点型の代入
echo $number. PHP_EOL; //3.14が出力される
$number = +3.14; //+はなくてもいい
echo $number. PHP_EOL; //3.14が出力される
$number = $number / 2; //2で割る
echo $number. PHP_EOL; //1.57が出力される
$number = -3.14; //負の値
echo $number. PHP_EOL; //3.14が出力される
$number = 3.14e5; //指数表現
echo $number. PHP_EOL; //314000が出力される
PHPの浮動小数点型の使い方
number_format()という関数を使って小数点の切り捨てをしてみます。
$number = 10 / 3; //割り切れない数
echo $number. PHP_EOL; //3.3333333333333 が表示される
echo number_format($number, 2) . PHP_EOL; //小数点2位までを表示
出力
3.3333333333333
3.33
PHPの浮動小数点型の確認・チェック
その値が浮動小数点型かどうかをチェックする方法で主要なやり方を2つ紹介します。
is_float()/is_double()
is_float()とis_double()は同じ機能をもつ関数です。
浮動小数点かどうか?を判定します。
PHPの過去の経緯でfloatとdoubleの2つ存在しますが、現在はis_float()を使っておくべきでしょう。
is_float()かis_double()が真なら整数型、偽ならそれ以外の型です。
$number = 3.14; //浮動小数点型の代入
if(is_float($number)){
print "numberの型はfloatです!" . PHP_EOL; //ここが出力される
}
if(is_double($number)){
print "numberの型はdoubleです!" . PHP_EOL; //ここが出力される
}
gettype()
gettype()関数の結果の文字列がdoubleなら整数型です。
こちらはPHPの過去の経緯によりPHP7でもdoubleと出力されます。
floatでないのが気持ち悪いところですが、すでに世の中に存在するプログラムのバグを避けるためになかなか変更できないようです。
$number = 3.14; //浮動小数点型の代入
echo gettype($number). PHP_EOL; //double と出力される
PHPの浮動小数点型の変換
他のデータ型から浮動小数点型への変換で主なやり方を2つ紹介します。
専用の関数floatval()/doubleval()で変換
floatval()/doubleval()は他のデータ型から浮動小数点型に変換をします。
どちらも同じ機能ですが、現在はfloatで統一しましょう。
$number2 = "100"; //100という文字列を代入
echo gettype($number2). PHP_EOL; //string と出力される
$number2 = doubleval($number2); //論理型に変換①
$number2 = floatval($number2); //論理型に変換② ※①②どちらも同じ
echo gettype($number2). PHP_EOL; //double と出力される
キャストによる変換
変換の型を指定して明示的に変換することをキャストといいます。
(float/double)を使います。
こちらもどちらを使っても同じですが現在はfloatで統一しましょう。
$number2 = "3.14"; //3.14という文字列を代入
echo gettype($number2) . PHP_EOL; //string と出力される
$number2 = (float)$number2; //論理型に変換①
$number2 = (double)$number2; //論理型に変換② ※①②どちらも同じ
echo gettype($number2). PHP_EOL; //double と出力される
その他のデータ型から浮動小数点にキャスト
その他のデータ型から浮動小数点にキャストへの例です。
小数点という点を除いては整数型とほぼ同様です。
var_dump((float)"aaa"); // float(0) 文字列は0に
var_dump((float)"999aaa"); // float(999) 文字列+数値は文字が省略
var_dump((float)"123"); // float(123) 数字だけの文字列は整数に
var_dump((float)"999.99"); // float(999.99) 文字列はそのまま
var_dump((float)"4E2"); // float(400) 指数表現も可能
var_dump((float)true); // float(1) trueは1
var_dump((float)false); // float(0) falseは0
var_dump((float)null); // float(0) nullは0
コメント