Odpowiedzi:
Nie ma różnicy w PHP. float
, double
Czy real
są takie same typ danych.
Na poziomie C wszystko jest przechowywane jako plik double
.
Rzeczywisty rozmiar jest nadal zależny od platformy.
Więcej informacji można znaleźć w instrukcji:
http://www.php.net/manual/en/language.types.float.php
function some( float $num){}
, kiedy some(17.23)
jej używam , rzuca błąd krytyczny, niektóre () muszą być instancją typu float, podana podwójnie,
real
w php nie ma takiego typu danych .
is_real
funkcja, która jest aliasem is_float
...; )
W przypadku PHP są takie same. http://www.php.net/manual/en/language.types.float.php :
Liczby zmiennoprzecinkowe (nazywane również „liczbami zmiennoprzecinkowymi”, „podwójnymi” lub „liczbami rzeczywistymi”) można określić za pomocą dowolnej z następujących składni: [...]
Mylące jest to, dlaczego gettype (którego i tak nie powinieneś używać) zwraca „double” zamiast „float”. Odpowiedź to http://de2.php.net/manual/en/function.gettype.php :
„double” (ze względów historycznych w przypadku liczby zmiennoprzecinkowej zwracane jest słowo „double”, a nie po prostu „float”)
Począwszy od PHP 7.0.6 w systemie Windows, porównanie tego polecenia bez xdebug:
$ php -r 'var_dump(28.4);'
float(28.4)
oraz z XDebug:
$ php -r 'var_dump(28.4);'
Command line code:1:
double(28.4)
Zauważ, że zmienia to tylko wyjście var_dump (), ale nie zmienia faktycznego zarządzania pamięcią.
Może to rozwiać pewne obawy, dlaczego na niektórych innych komputerach double
zamiast float
w var_dump wyświetla się.
Ponadto, z xdebug lub bez, gettype
nadal powraca string(6) "double"
.
W PHP 7.0.14
function test(double $a) {
var_dump($a);
}
test(2.2111);
Zwraca „Błąd krytyczny: Uncaught TypeError: Argument 1 przekazany do testu () musi być instancją double, podana liczba zmiennoprzecinkowa”.
function test(float $a) {
var_dump($a);
}
test(2.2111);
Drukuje 2,2111 na ekranie.