Różnica między float i double w php?

117

Mam ten kod

$vad = 1.1;

print gettype($vad);

var_dump($vad);

to da:

double
float(1.1) 

Czyli w php jest to double czy float?

Centurion
źródło

Odpowiedzi:

152

Nie ma różnicy w PHP. float, doubleCzy realsą 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

Macmade
źródło
pewny tego? czy jest jakieś inne użycie pamięci?
TheCrazyProfessor
2
Mam funkcję 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,
NaveenDA
1
@NaveenDA Jaka wersja PHP? Przed PHP 7.0 wskazówki dotyczące typów skalarnych nie były dostępne i były zamiast tego interpretowane jako nazwy klas. To wygląda na to, co się tam dzieje.
Ken Wayne VanderLinde
wyjaśniam tylko, że jak dotąd realw php nie ma takiego typu danych .
Muhammad Sheraz
@MuhammadSheraz Ale jest is_realfunkcja, która jest aliasem is_float...; )
Macmade
21

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”)

Victor Nicollet
źródło
10

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 doublezamiast floatw var_dump wyświetla się.

Ponadto, z xdebug lub bez, gettypenadal powraca string(6) "double".

SOFe
źródło
4

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.

Oboroten
źródło
8
Tylko floatjest ważna wskazówka typu ( patrz ). Kiedy doublezamiast tego wpiszesz , jest traktowany jak nazwa klasy, a interpreter zgłasza wyjątek, ponieważ oczekuje zmiennej z instancją doubleklasy
AterLux