Perbedaan antara float dan double di php?

117

Saya memiliki kode ini

$vad = 1.1;

print gettype($vad);

var_dump($vad);

ini akan menghasilkan:

double
float(1.1) 

Jadi double atau float di php?

Centurion
sumber

Jawaban:

152

Tidak ada perbedaan dalam PHP. float, doubleatau realtipe data yang sama.

Pada tingkat C, semuanya disimpan sebagai file double.
Ukuran sebenarnya masih bergantung pada platform.

Lihat manual untuk lebih jelasnya:
http://www.php.net/manual/en/language.types.float.php

Macmade
sumber
yakin tentang itu? apakah ada perbedaan penggunaan memori tentang itu?
TheCrazyProfessor
2
Saya memiliki fungsi function some( float $num){}, ketika saya menggunakannya some(17.23)akan muncul kesalahan fatal some () harus berupa contoh float, double given,
NaveenDA
1
@NaveenDA PHP versi berapa? Sebelum PHP 7.0, petunjuk jenis skalar tidak tersedia dan akan diinterpretasikan sebagai nama kelas. Sepertinya apa yang terjadi di sana.
Ken Wayne VanderLinde
hanya menjelaskan tidak ada tipe data seperti itu realdi php sejauh ini.
Muhammad Sheraz
@MuhammadSheraz Tapi ada is_realfungsi, dengan alias dari is_float...; )
Macmade
21

Untuk PHP, keduanya sama. http://www.php.net/manual/en/language.types.float.php :

Bilangan floating point (juga dikenal sebagai "floats", "doubles", atau "real number") dapat ditentukan menggunakan salah satu sintaks berikut: [...]

Bagian yang membingungkan adalah mengapa gettype (yang seharusnya tidak Anda gunakan) mengembalikan "double" daripada "float". Jawabannya adalah http://de2.php.net/manual/en/function.gettype.php :

"double" (karena alasan historis "double" dikembalikan jika ada float, dan bukan hanya "float")

Victor Nicollet
sumber
10

Pada PHP 7.0.6 di Windows, membandingkan perintah ini tanpa xdebug:

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

dan dengan xdebug:

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

Perhatikan bahwa ini hanya mengubah output var_dump (), tetapi bukan manajemen memori yang sebenarnya.

Ini mungkin mengatasi beberapa masalah mengapa Anda melihat doublealih-alih floatditampilkan di var_dump di beberapa komputer lain.

Juga, dengan atau tanpa xdebug, gettypemasih mengembalikan string(6) "double".

SOFe
sumber
4

Di PHP 7.0.14

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

Mengembalikan "Kesalahan fatal: Tidak Tertangkap TypeError: Argumen 1 yang diteruskan ke test () harus berupa turunan ganda, diberi float".

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

Mencetak 2.2111 ke layar.

Oboroten
sumber
8
Hanya floatpetunjuk tipe yang valid ( lihat ). Saat Anda mengetik double, ini akan diperlakukan sebagai nama kelas, dan interpreter melontarkan pengecualian, karena ia mengharapkan variabel dengan instance doublekelas
AterLux