2010-07-19 9 views

risposta

118

Non c'è differenza in PHP. float, double o real sono lo stesso tipo di dati.

Al livello C, tutto è memorizzato come double.
La dimensione reale dipende ancora dalla piattaforma.

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

+0

sicuro a tale proposito? c'è qualche uso della memoria diffrente a riguardo? – TheCrazyProfessor

+1

Ho funzione 'function some (float $ num) {}', quando uso 'some (17.23)' genera ** errore fatale ** some() deve essere un'istanza di float, double data, – NaveenDA

+0

@NaveenDA What versione di PHP? Prima di PHP 7.0, gli hint del tipo scalare non erano disponibili e sarebbero interpretati come nomi di classi. Sembra quello che sta succedendo lì. –

17

Per PHP, sono la stessa cosa. http://www.php.net/manual/en/language.types.float.php:

Floating point numbers (also known as "floats", "doubles", or "real numbers") can be specified using any of the following syntaxes: [...]

La parte confusa è il motivo per gettype (che non si dovrebbe usare, in ogni caso) restituisce "doppio" al posto di "galleggiare". La risposta è http://de2.php.net/manual/en/function.gettype.php:

" double " (for historical reasons "double" is returned in case of a float , and not simply "float")

3

Dal 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 modifica solo l'output var_dump(), ma non l'effettiva gestione della memoria.

Questo potrebbe risolvere alcuni dubbi sul perché si veda double anziché float mostrato in var_dump in alcune altre macchine.

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

+0

Molto interessante! Grazie per averlo indicato. –

0

In PHP 7.0.14

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

Restituisce "errore irreversibile: TypeError Uncaught: Argomento 1 sottoposte alla prova() deve essere un'istanza di double, float dato".

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

Stampa 2.2111 sullo schermo.