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?

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


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


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".


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.


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
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.