Мне просто нужна была информация об этом.
float n = 2.99944323200023f
Что делает f
в конце литерала? Как это называется? Почему он используется?
Мне просто нужна была информация об этом.
float n = 2.99944323200023f
Что делает f
в конце литерала? Как это называется? Почему он используется?
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 - не просто ошибка.)
Тип Java по умолчанию, который Java будет использовать для переменной float, будет двойной. Таким образом, даже если вы объявляете какую-либо переменную как float, что должен сделать компилятор, это присвоить двойное значение переменной float, что невозможно. Поэтому, чтобы сообщить компилятору относиться к этому значению как поплавку, это 'f' используется.
В Java, когда вы вводите десятичное число как 3.6
, его интерпретируется как double
. double
- это 64-битная точность IEEE 754 с плавающей запятой, а float
- 32-битная точность IEEE 754 с плавающей запятой. Поскольку float
менее точен, чем a double
, преобразование не может выполняться неявно.
Если вы хотите создать float, вы должны закончить свой номер с помощью f
(т.е.: 3.6f
).
Для получения дополнительной информации см. определение примитивных типов данных учебника Java.
Это позволяет различать числа с плавающей запятой и двойной точностью. Последний не имеет суффикса.
Когда вы пишете 1.0, это двусмысленно относительно того, хотите ли вы, чтобы литерал был плавающим или двойным. Написав 1.0f, вы говорите Java, что вы предполагаете, что литерал является float, в то время как 1.0g указывает, что он должен быть двойным (который также является по умолчанию, если вы не укажете его явно).
Вам нужно поместить "f" в конец, иначе Java будет считать его двойным.
Это означает, что одинарная точность с плавающей запятой, а не double точность. В противном случае вам нужно написать float n = (float)2.99944323200023;
, чтобы сделать двойным одиночным.
Из Oracle Java Tutorial, раздел Примитивные типы данных в литералах с плавающей запятой
Литерал с плавающей запятой имеет тип float, если он заканчивается буквой F или f; в противном случае его тип двойной, и он может по желанию заканчиваться буквой D или d.
Если f
не уточняется в конце, значение считается double
.
А double
приводит к большему количеству байтов в памяти, чем float
.