PHPのfloatとdoubleの違いは?


117

私はこのコードを持っています

$vad = 1.1;

print gettype($vad);

var_dump($vad);

これは出力します:

double
float(1.1) 

それで、それはphpでdoubleまたはfloatですか?

回答:


151

PHPに違いはありません。floatdoubleまたはreal同じデータ型です。

Cレベルでは、すべてがとして格納されますdouble
実際のサイズは依然としてプラットフォームに依存しています。

詳細についてはマニュアルを参照してください:http :
//www.php.net/manual/en/language.types.float.php


それについて確かですか?それについていくつかのメモリ使用の違いはありますか?
TheCrazyProfessor 2017年

2
私は関数を持っていますがfunction some( float $num){}、使用するsome(17.23)致命的なエラーがスローされます some()は浮動小数点数のインスタンスでなければなりません。二重指定されています
NaveenDA

1
@NaveenDAどのバージョンのPHPですか?PHP 7.0より前は、スカラー型のヒントは使用できず、代わりにクラス名として解釈されていました。それはそこで起こっているように見えます。
ケンウェインヴァンダーリンデ2017年

realこれまでのところ、PHPにはそのようなデータ型がないことを明確にするだけです。
ムハンマドシェラーズ

@MuhammadSherazしかしis_realis_float...のエイリアスである関数があります。)
Macmade

21

PHPの場合も同じです。http://www.php.net/manual/en/language.types.float.php

浮動小数点数(「float」、「double」、または「実数」とも呼ばれます)は、次の構文のいずれかを使用して指定できます:[...]

紛らわしいのは、gettype(とにかく使用すべきではない)が「float」ではなく「double」を返す理由です。答えはhttp://de2.php.net/manual/en/function.gettype.phpです:

"double"(歴史的な理由から、単に "float"ではなく、floatの場合は "double"が返されます)


10

Windows上のPHP 7.0.6以降、このコマンド xdebug なしで比較します。

$ php -r 'var_dump(28.4);'
float(28.4)

そして、 xdebugの:

$ php -r 'var_dump(28.4);'
Command line code:1:
double(28.4)

これはvar_dump()の出力のみを変更し、実際のメモリ管理は変更しないことに注意してください。

これは、他の一部のマシンのvar_dumpに表示されるdouble代わりにfloat表示されるいくつかの懸念に対処する場合があります。

また、xdebugの有無にgettypeかかわらず、引き続きを返しますstring(6) "double"


4

PHP 7.0.14

function test(double $a) {
    var_dump($a);
}
test(2.2111);

「致命的エラー:キャッチされないTypeError:test()に渡される引数1は、floatが指定されたdoubleのインスタンスでなければなりません」を返します。

function test(float $a) {
    var_dump($a);
}
test(2.2111);

2.2111を画面に出力します。


8
float有効なタイプヒントのみです(を参照)。あなたが入力するとdouble代わりに、それはクラス名として扱われ、それはインスタンス変数と予想しているため、インタプリタは、例外をスローdoubleするクラスを
AterLux
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.