Що таке плавання в Java?


102

Я написав цей код:

float b = 3.6;

і я отримую це:

Помилка: невирішена проблема компіляції: 
    Невідповідність типу: неможливо перетворити з подвійного в плаваючий

Чому? Що таке визначення float?



1
@Sneftel Це не дублікат цього питання. Це запитання задає, чому він не компілюється (на що відповідь - ви повинні додати fбуква в буквальному сенсі), а в іншому запитанні, чому ви повинні додати f. Хоча вони пов'язані, це не дублікат.
Марк Ротвевель

Див. Meta.stackexchange.com/questions/217401/… . Відповіді на пов'язане питання - це відповіді на це питання.
Снефтель

Відповіді:


180

У Java, коли ви вводите десяткове число як 3.6, інтерпретується як a double. double64-бітова точність IEEE 754 з плаваючою точкою, в той час floatяк 32-бітова точність IEEE 754 з плаваючою точкою. Оскільки a floatменш точний, ніж a double, перетворення не може бути здійснено неявно.

Якщо ви хочете створити флоат, вам слід закінчити свій номер f(тобто:) 3.6f.

Для отримання додаткового пояснення див. Визначення примітивних типів даних підручника Java .


40

Зроби це

float b= 3.6f;

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


Чи є спосіб перевірити, чи має рядок лише плаваюче значення?
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;

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.