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.