2010-07-19 3 views

ответ

118

В PHP нет никакой разницы. float, double или real - это тот же тип данных.

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

Смотрите руководство для более подробной информации:
http://www.php.net/manual/en/language.types.float.php

+0

уверен в этом? есть ли какая-то память об этом? – TheCrazyProfessor

+1

У меня есть функция 'function some (float $ num) {}', когда я использую 'some (17.23)' it throws ** фатальная ошибка ** some() должен быть экземпляром float, double given, – NaveenDA

+0

@NaveenDA What версия PHP? До PHP 7.0 подсказки скалярного типа были недоступны и вместо этого были бы интерпретированы как имена классов. Это похоже на то, что происходит там. –

17

Для PHP, они одинаковы. 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: [...]

Запутанная часть поэтому GetType (которые вы не должны использовать, во всяком случае) возвращает «двойные» вместо «поплавка». Ответ 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

В РНР 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".

+0

Очень интересно! Спасибо за указание на это. –

0

В PHP 7.0.14

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

возвращает "Фатальная ошибка: Uncaught TypeError: Аргумент 1 передается для проверки() должен быть экземпляром дважды, поплавок дал".

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

Печатает 2.2111 на экран.

Смежные вопросы