Differenza tra float e double in php?


117

Ho questo codice

$vad = 1.1;

print gettype($vad);

var_dump($vad);

questo produrrà:

double
float(1.1) 

Quindi è double o float in php?

Risposte:


152

Non c'è differenza in PHP. float, doubleO realsono gli stessi tipo di dati.

A livello C, tutto viene memorizzato come file double.
La dimensione reale dipende ancora dalla piattaforma.

Vedere il manuale per maggiori dettagli:
http://www.php.net/manual/en/language.types.float.php


sicuro di questo? ci sono alcune differenze nell'uso della memoria?
TheCrazyProfessor

2
Ho una funzione function some( float $num){}, quando la uso some(17.23)genera un errore fatale, alcuni () devono essere un'istanza di float, doppia data,
NaveenDA

1
@NaveenDA Quale versione di PHP? Prima di PHP 7.0, i suggerimenti di tipo scalare non erano disponibili e venivano invece interpretati come nomi di classi. Sembra quello che sta succedendo lì.
Ken Wayne VanderLinde

solo chiarendo che non esiste un tale tipo realdi dati in php finora.
Muhammad Sheraz

@MuhammadSheraz Ma c'è una is_realfunzione, con è un alias di is_float...; )
Macmade

21

Per PHP, sono gli stessi. http://www.php.net/manual/en/language.types.float.php :

I numeri in virgola mobile (noti anche come "float", "doppi" o "numeri reali") possono essere specificati utilizzando una qualsiasi delle seguenti sintassi: [...]

La parte che crea confusione è il motivo per cui gettype (che comunque non dovresti usare) restituisce "double" invece di "float". La risposta è http://de2.php.net/manual/en/function.gettype.php :

"double" (per ragioni storiche "double" viene restituito in caso di float, e non semplicemente "float")


10

A partire da PHP 7.0.6 su Windows, confrontando questo comando senza xdebug:

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

e con xdebug:

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

Nota che questo cambia solo l'output di var_dump (), ma non l'effettiva gestione della memoria.

Questo potrebbe risolvere alcune preoccupazioni sul motivo per cui vedi doubleinvece di essere floatmostrato in var_dump su altre macchine.

Inoltre, con o senza xdebug, gettyperestituisce ancora string(6) "double".


4

In PHP 7.0.14

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

Restituisce "Errore irreversibile: TypeError non rilevato: l'argomento 1 passato a test () deve essere un'istanza di double, float fornito".

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

Stampa 2.2111 sullo schermo.


8
Solo floatè un suggerimento di tipo valido ( vedere ). Quando si digita double, invece, viene trattato come un nome di classe e l'interprete lancia l'eccezione, perché si aspetta una variabile con istanza deldouble classe
AterLux
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.