Я не знаю, чому f або F ставиться після значень з плаваючою комою в Java чи інших мовах? наприклад,
float fVariable = 12.3f;
будь-які функції, крім вказівки, що це плаваюче значення?
Я не знаю, чому f або F ставиться після значень з плаваючою комою в Java чи інших мовах? наприклад,
float fVariable = 12.3f;
будь-які функції, крім вказівки, що це плаваюче значення?
Відповіді:
за замовчуванням 12.3
- double
буквальний, тому сказати компілятору, щоб він поводився з ним float
явно -> він використовує f
абоF
Вбачаючи, що у вашій програмі існує лише стільки способів представити число, дизайнерам Java довелося вибирати і призначати кожну форму найпоширенішому випадку використання. Для тих форм, які вибрані за замовчуванням, суфікс, що позначає точний тип, необов’язковий.
Отже, коли ви вводите 12
свою програму, це int літерал, на відміну від 12L
, який є довгим . І коли ви вводите 12.3
, це подвійний літерал, на відміну від 12.3F
, який є флоат .
То де це актуально? В першу чергу при обробці знижених даних або звуженні конверсій. Кожного разу, коли ви знижуєте long до int або double до float, існує можливість втрати даних. Отже, компілятор змусить вас вказати, що ви дійсно хочете виконати перетворення звуження, сигналізуючи про помилку компіляції приблизно для цього:
float f = 12.3;
Оскільки 12.3 являє собою дубль, вам потрібно явно передати його на плаваючу позицію (в основному, підписавшись при перетворенні звуження). В іншому випадку ви можете вказати, що число насправді плаваюче, використовуючи правильний суфікс;
float f = 12.3f;
Отже, резюмуємо, необхідність вказувати суфікс для longs і floats - це компроміс, який вибрали дизайнери мови, щоб збалансувати необхідність уточнення, що саме таке число, та гнучкість перетворення чисел з одного типу сховища на інший.
d
найкраще double
представляти якусь числову величину x
, воно float f=(float)d
буде найближчим float
до деякого значення, яке знаходиться в межах частки на трильйон x
, хоча для цього потрібна типова діаграма. На відміну від цього, якщо f
найкраще float
подання якогось числового значення x
, double d=f
не потребує типової діаграми, навіть якщо воно часто не наближається до найкращого double
подання x
і може бути відключене на сотні порядків . Я вважаю іронічним, що float f=(float)(1.0/10.0)
потрібен акторський склад, але double d=1.0f/10.0f
цього не потрібно.
float
і double
може надати лише приблизні значення подання для деяких значень. наприклад 12,3 або 0,1
Різниця полягає в тому, що поплавок не такий точний (оскільки він має меншу точність, оскільки менший)
напр
System.out.println("0.1f == 0.1 is " + (0.1f == 0.1));
System.out.println("0.1f is actually " + new BigDecimal(0.1f));
System.out.println("0.1 is actually " + new BigDecimal(0.1));
відбитки
0.1f == 0.1 is false
0.1f is actually 0.100000001490116119384765625
0.1 is actually 0.1000000000000000055511151231257827021181583404541015625
Так само 0.1
є найближче представництво в double
і 0.1f
є найближчим представництвом уfloat
float fVariable = 12,3; добре. але коли ви використовуєте лише плаваюче значення (без будь-якого ідентифікатора) у будь-якому виразі, тоді вам потрібно сказати компілятору, що значення є плаваючим, тому ми використовуємо суфікс "f" після значення. приклад
float fl = 13f / 5f;
тут 13 і 5 - плаваючі значення.
У Java ми маємо багато різних типів базових змінних, тому, щоб зробити це загальним, він має деякі функції за замовчуванням. Як, якщо ми вводимо вхід 16.02, він автоматично приймає його як подвійний вхід. Отже, якщо ви хочете вказати його як плаваючий, ми згадуємо після цифри 'f' або ми можемо просто використовувати:
float f = (float) 16.02;
або
float f = 16.02f;
Таким же чином ми повинні згадати 16 л, якщо ми хочемо, щоб номер зберігався як довгий тип, інакше він автоматично вибере тип за замовчуванням, тобто тип int.
Float - це 32-розрядна плаваюча крапка IEEE 754 з однією точністю, а Double - 64-бітна плаваюча точка IEEE 754 з подвійною точністю. Коли ви використовуєте значення з десятковою комою, а якщо не вказали значення 0,23f (зокрема, плаваюче), Java ідентифікує його як подвійне.
Для десяткових значень подвійний тип даних, як правило, вибір за замовчуванням, прийнятий Java. Перевір це
Якщо ви не використовуєте f, він буде інтерпретований як подвійний, що є типовим для Java. Ви також можете написати це так ##
float f=(float) 32.5956;
float f=32.5956f;