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.