そのまんま!

浮動小数点数

("float", "double", "実数" のような) 浮動小数点数は、次の構文により指定できます。

<?php
$a
= 1.234;
$b = 1.2e3;
$c = 7E-10;
?>

規約:

LNUM          [0-9]+
DNUM          ([0-9]*[\.]{LNUM}) | ({LNUM}[\.][0-9]*)
EXPONENT_DNUM ( ({LNUM} | {DNUM}) [eE][+-]? {LNUM})

float の大きさはプラットフォーム依存です。ただし、通常はおよそ 10 進数で 14 桁の精度があり、最大値は ~1.8e308 (これは 64ビット IEEE フォーマットです) となります。

浮動小数点数の精度

0.10.7 のようなシンプルな小数であっても、 それを内部的な二進数表現に変換する際には、どうしても多少精度が落ちてしまいます。 その結果、不思議な結果を引き起こすことがあります。たとえば、 floor((0.1+0.7)*10) の結果はたいてい 7 となるでしょう。おそらくは 8 を想定していらっしゃるでしょうが、そのようにはなりません。 これは、(この計算結果の) 内部的な値が 7.9999999999... のようになっているからです。

こうなる理由のひとつとして、「有限小数に変換できない分数がある」 という事実があります。たとえば 1/3 を小数で表そうとすると 0.3333333. . . となります。

よって、小数の最後の桁を信用してはいけませんし、 小数が等しいという比較を行ってはいけません。より高い精度が必要な場合には、 任意精度数学関数または gmp 関数を代わりに使用してください。

float への変換

文字列型がどのようにして浮動小数点数に変換されるかに関する詳細な情報は、 文字列の数値型への変換 のセクションをご覧ください。 そのほかの型の浮動小数点数への変換については、整数型への変換と同様です。 詳細は整数型への変換 のセクションをご覧ください。 PHP 5 以降、オブジェクトを不動小数点数に変換しようとした場合には、 通知がスローされます。