Php'de float ve double arasındaki fark?


117

Bu koda sahibim

$vad = 1.1;

print gettype($vad);

var_dump($vad);

bu çıktı:

double
float(1.1) 

Yani php'de double mı yoksa float mı?

Yanıtlar:


152

PHP'de hiçbir fark yoktur. float, doubleYa da realaynı veri türü vardır.

C düzeyinde, her şey bir double.
Gerçek boyut hala platforma bağlıdır.

Daha fazla ayrıntı için kılavuza bakın:
http://www.php.net/manual/en/language.types.float.php


bunun hakkında emin olmak? bununla ilgili bazı hafıza kullanımları var mı?
TheCrazyProfessor

2
function some( float $num){}some(17.23)
İşlevim

1
@NaveenDA PHP'nin hangi sürümü? PHP 7.0'dan önce, skaler tür ipuçları mevcut değildi ve bunun yerine sınıf adları olarak yorumlanacaktı. Orada olana benziyor.
Ken Wayne VanderLinde

realphp'de şimdiye kadar böyle bir veri türü olmadığını açıklığa kavuşturmak .
Muhammad Sheraz

@MuhammadSheraz Ama bir is_realişlev var, with is a alias of is_float...; )
Macmade

21

PHP için bunlar aynıdır. http://www.php.net/manual/en/language.types.float.php :

Kayan nokta numaraları ("kayan sayılar", "çiftler" veya "gerçek sayılar" olarak da bilinir) aşağıdaki sözdizimlerinden herhangi biri kullanılarak belirtilebilir: [...]

Kafa karıştıran kısım, gettype'ın (yine de kullanmamalısınız) neden "float" yerine "double" döndürdüğüdür. Cevap http://de2.php.net/manual/en/function.gettype.php :

"double" (tarihsel nedenlerden dolayı, float durumunda "double" döndürülür, sadece "float" değil)


10

Windows üzerinde PHP 7.0.6'dan itibaren, bu komutu xdebug olmadan karşılaştırarak :

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

ve ile Xdebug:

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

Bunun yalnızca var_dump () çıktısını değiştirdiğini, ancak gerçek bellek yönetimini değiştirmediğini unutmayın.

Bu, bazı diğer makinelerde var_dump'ta gösterilmek doubleyerine neden gördüğünüzle ilgili bazı endişeleri floatgiderebilir.

Ayrıca, xdebug olsun veya olmasın, gettypeyine de geri döner string(6) "double".


4

PHP 7.0.14'te

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

"Önemli hata: Yakalanmamış TypeError: test () 'e geçirilen bağımsız değişken 1, double, verilen bir float örneği olmalıdır" döndürür.

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

2.2111'i ekrana yazdırır.


8
Yalnızca floatgeçerli bir tür ipucudur ( bkz. ). Eğer yazdığınızda doublebunun yerine, bir sınıf adı olarak kabul edilir ve bu örneği ile bir değişken beklediği için tercüman, istisna atar doublesınıfın
AterLux
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.