Разница между float и double в php?


118

У меня есть этот код

$vad = 1.1;

print gettype($vad);

var_dump($vad);

это выведет:

double
float(1.1) 

То есть в php это double или float?

Ответы:


153

В PHP нет разницы. float, doubleили realимеют тот же тип данных.

На уровне C все хранится в виде файла double.
Реальный размер по-прежнему зависит от платформы.

Подробнее см. В руководстве:
http://www.php.net/manual/en/language.types.float.php


уверен в этом? Есть ли какое-то использование памяти по-другому?
TheCrazyProfessor

2
У меня есть функция function some( float $num){}, когда я ее использую, some(17.23)выдает фатальную ошибку, some () должен быть экземпляром float, заданным двойным,
NaveenDA 02

1
@NaveenDA Какая версия PHP? До PHP 7.0 подсказки скалярных типов не были доступны и вместо этого интерпретировались бы как имена классов. Похоже, что там происходит.
Ken Wayne VanderLinde

просто уточняю, что realв php пока нет такого типа данных .
Мухаммад Шераз

@MuhammadSheraz Но есть is_realфункция, с псевдонимом is_float...; )
Macmade

21

Для PHP они такие же. http://www.php.net/manual/en/language.types.float.php :

Числа с плавающей запятой (также известные как «числа с плавающей запятой», «двойные» или «действительные числа») могут быть указаны с использованием любого из следующих синтаксисов: [...]

Непонятная часть заключается в том, почему gettype (который вам в любом случае не следует использовать) возвращает «double» вместо «float». Ответ: http://de2.php.net/manual/en/function.gettype.php :

"double" (по историческим причинам "double" возвращается в случае float, а не просто "float")


10

Начиная с PHP 7.0.6 в Windows, сравнивая эту команду без xdebug:

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

и с xdebug:

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

Обратите внимание, что это изменяет только вывод var_dump (), но не фактическое управление памятью.

Это может решить некоторые проблемы, по которым вы видите doubleвместо floatотображения в var_dump на некоторых других машинах.

Кроме того, с xdebug или без него gettypeвсе равно возвращается string(6) "double".


4

В PHP 7.0.14

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

Возвращает «Неустранимая ошибка: Uncaught TypeError: аргумент 1, переданный в test (), должен быть экземпляром double, задано float».

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

Выводит на экран 2.2111.


8
Только floatдопустимая подсказка типа ( см. ). Когда вы вводите doubleвместо этого, он обрабатывается как имя класса, и интерпретатор выдает исключение, потому что он ожидает переменную с экземпляром doubleкласса
AterLux
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.