PHPのfloat(浮動小数点)型

PHPのfloat(浮動小数点)型は、小数点を持つ実数で使用します。また、整数値でもPHP_INT_MAXの値を超えた場合は、自動的にfloat型へキャストされます。

変数に小数点を持つ数値を代入するとfloat型として初期化されます。下記コードでは、試しに1.0を代入していますが、変数をvar_dump()で出力してみると値は1が出力されますが、型はintではなくfloatになっていることが確認できます。

PHP

<?php
$float_00 = 1.1;
var_dump($float_00); // 出力:float(1.1)

$float_01 = 1.0;
var_dump($float_01); // 出力:float(1)
?>

また、下記のように指数表記で代入した場合もfloat型として初期化されます。どちらも値は整数ですが、var_dump()で出力するとfloat型であることが確認できます。

PHP

<?php
$float_02 = 7e2;
var_dump($float_02); // 出力:float(700)

$float_03 = 1000e-2;
var_dump($float_03); // 出力:float(10)
?>

float型へ明示的にキャストするには、(float)またはfloatval()を使用します。下記のコードは、文字列型を浮動小数点型に型変換した例ですが、int型と同じように文字列の先頭に数値を表す文字が続いた場合、そこまでを数値として解釈します。また、先頭が数値を表す文字でない場合、値は0となります。

PHP

<?php
$float_04 = floatval('5.1');
var_dump($float_04); // 出力:float(5.1)

$float_05 = (float)'10.3%';
var_dump($float_05); // 出力:float(10.3)

$float_06 = floatval('v7.2');
var_dump($float_06); // 出力:float(0)
?>

また、論理型から浮動小数点型に型変換した場合もint型と同じようにTRUEは1、FALSEは0にキャストされます。

PHP

<?php
$float_07 = (float)TRUE;
var_dump($float_07); // 出力:float(1)

$float_08 = floatval(FALSE);
var_dump($float_08); // 出力:float(0)
?>

float型を扱う際に注意すべき点は、若干の誤差が生じる場合がある点です。これは、PHPマニュアル:浮動小数点数にも記載されていますが、例えば下記コードでは8が出力されるように思えますが、実際には7が出力されてしまいます。PHPマニュアルでは、小数の最後の桁を信用しないこと、小数が等しいという比較をするべきではないことを警告しています。

PHP

<?php
$float_09 = floor((0.1 + 0.7) * 10);
var_dump($float_09); // 出力:float(7)
?>
  • このエントリーをはてなブックマークに追加

Advertisement