Почему буква 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 будет считать его двойным.

Ответ 8

Из Oracle Java Tutorial, раздел Примитивные типы данных в литералах с плавающей запятой

Литерал с плавающей запятой имеет тип float, если он заканчивается буквой F или f; в противном случае его тип двойной, и он может по желанию заканчиваться буквой D или d.

Ответ 9

Если f не уточняется в конце, значение считается double. А double приводит к большему количеству байтов в памяти, чем float.