Почему буква f используется в конце поплавка?
Мне просто нужна была информация об этом.
float n = 2.99944323200023f
Что делает f
в конце литерала? Как это называется? Почему он используется?
Ответы
Ответ 1
f
указывает на литерал с плавающей запятой, а не на двойной литерал (который он неявно будет иначе). У него нет специального технического названия, о котором я знаю - я обычно называю это буквенным суффиксом "если мне нужно обратиться к нему конкретно, хотя это несколько произвольно!
Например:
float f = 3.14f; //Compiles
float f = 3.14; //Doesn't compile, because you're trying to put a double literal in a float without a cast.
Конечно, вы можете:
float f = (float)3.14;
..., который выполняет почти то же самое, но F является более аккуратным, более сжатым способом его отображения.
Почему был выбран двойной вариант по умолчанию, а не поплавок? В наши дни требования к памяти двойника над поплавком не являются проблемой в 99% случаев, и дополнительная точность, которую они предоставляют, полезна во многих случаях, поэтому вы можете утверждать, что разумное значение по умолчанию.
Обратите внимание, что вы можете явно показать десятичный литерал как double, положив в конце d
:
double d = 3.14d;
... но так как это двойное значение, это не имеет никакого эффекта. Некоторые люди могут возразить, что он более четко разъясняет, что именно вы имеете в виду, но лично я считаю, что это просто код загромождения (если, возможно, у вас много плавающих литералов, а вы хотите подчеркнуть, что этот литерал действительно должен быть двойным, а упущение f - не просто ошибка.)
Ответ 2
Тип Java по умолчанию, который Java будет использовать для переменной float, будет двойной. Таким образом, даже если вы объявляете какую-либо переменную как float, что должен сделать компилятор, это присвоить двойное значение переменной float, что невозможно. Поэтому, чтобы сообщить компилятору относиться к этому значению как поплавку, это 'f' используется.
Ответ 3
В Java, когда вы вводите десятичное число как 3.6
, его интерпретируется как double
. double
- это 64-битная точность IEEE 754 с плавающей запятой, а float
- 32-битная точность IEEE 754 с плавающей запятой. Поскольку float
менее точен, чем a double
, преобразование не может выполняться неявно.
Если вы хотите создать float, вы должны закончить свой номер с помощью f
(т.е.: 3.6f
).
Для получения дополнительной информации см. определение примитивных типов данных учебника Java.
Ответ 4
Это позволяет различать числа с плавающей запятой и двойной точностью. Последний не имеет суффикса.
Ответ 5
Когда вы пишете 1.0, это двусмысленно относительно того, хотите ли вы, чтобы литерал был плавающим или двойным. Написав 1.0f, вы говорите Java, что вы предполагаете, что литерал является float, в то время как 1.0g указывает, что он должен быть двойным (который также является по умолчанию, если вы не укажете его явно).
Ответ 6
Вам нужно поместить "f" в конец, иначе Java будет считать его двойным.
Ответ 7
Это означает, что одинарная точность с плавающей запятой, а не double точность. В противном случае вам нужно написать float n = (float)2.99944323200023;
, чтобы сделать двойным одиночным.
Ответ 8
Из Oracle Java Tutorial, раздел Примитивные типы данных в литералах с плавающей запятой
Литерал с плавающей запятой имеет тип float, если он заканчивается буквой F или f; в противном случае его тип двойной, и он может по желанию заканчиваться буквой D или d.
Ответ 9
Если f
не уточняется в конце, значение считается double
.
А double
приводит к большему количеству байтов в памяти, чем float
.