Что такое float в Java?

103

Я написал такой код:

float b = 3.6;

и я получаю это:

Ошибка: нерешенная проблема компиляции: 
    Несоответствие типов: невозможно преобразовать из double в float

Зачем? Что такое определение float?

t0mkaka
источник
1
@Sneftel Это не дубликат этого вопроса. В этом вопросе задается вопрос, почему он не компилируется (на что ответ: «вы должны добавить fк литералу»), в то время как другой вопрос спрашивает, почему вы должны добавить f. Хотя они связаны, это не дубликат.
Марк Роттевил
См. Meta.stackexchange.com/questions/217401/… . Ответы на связанный вопрос являются ответами на этот вопрос.
Sneftel

Ответы:

180

В Java, когда вы вводите десятичное число как 3.6, оно интерпретируется как double. doubleпредставляет собой 64-битную точность с плавающей запятой IEEE 754 floatи 32-битную точность с плавающей запятой IEEE 754. Поскольку a floatменее точен, чем a double, преобразование не может быть выполнено неявно.

Если вы хотите создать число с плавающей запятой, вы должны закончить свой номер f(например:) 3.6f.

Для получения дополнительных объяснений см. Определение примитивных типов данных в руководстве по Java .

Николас
источник
41

Сделай это

float b= 3.6f;

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

Джигар Джоши
источник
Есть ли способ проверить, имеет ли строка только значение с плавающей запятой?
MasterJoe
13

Дело в том, что десятичные числа по умолчанию удваиваются. И поскольку double не подходит для float, вы должны явно указать, что вы намеренно определяете float. Итак, идите с:

float b = 3.6f;
Ян Зыка
источник
8

В JAVA такие значения, как:

  1. 8,5
  2. 3.9
  3. (и так далее..)

Считается двойным, а не плавающим .

Вы также можете выполнить приведение, чтобы решить проблему:

float b = (float) 3.5;

Другое решение:

float b = 3.5f;

Карлос Са
источник