it-swarm.com.ru

почему f ставится после значений с плавающей запятой?

Я не знаю, почему f или F ставятся после значений с плавающей запятой в Java или других языках? например,

float fVariable = 12.3f;

какие-либо функции, кроме указания, что это значение с плавающей запятой?

63
ipkiss

по умолчанию 12.3 является double литералом, поэтому, чтобы сказать компилятору явно обращаться с ним как float -> он использует f или F

56
Jigar Joshi

Поскольку существует очень много способов представления числа в вашей программе, разработчики Java должны были выбрать и назначить каждую форму для наиболее распространенного варианта использования. Для форм, выбранных по умолчанию, суффикс, обозначающий точный тип, является необязательным.

  • Для целочисленных литералов (int, long) по умолчанию используется int. По очевидным причинам
  • Для литералов с плавающей точкой (float, double) значением по умолчанию является double . Поскольку использование double потенциально позволяет использовать арифметику safer для сохраненных значений

Итак, когда вы набираете 12 в своей программе, это литерал int, а не 12L, который является long . А когда вы набираете 12.3, это литерал double , в отличие от 12.3F, который является float.

Так где же это актуально? В первую очередь при обработке откликов или сужении конверсий. Всякий раз, когда вы понижаете long до int или до двойного с плавающей точкой, существует вероятность потери данных. Таким образом, компилятор заставит вас указать, что выдействительнохотите выполнить сужающее преобразование, сигнализируя об ошибке компиляции для чего-то вроде этого:

float f = 12.3;

Поскольку 12.3 представляет двойное число, вы должны явно преобразовать его в число с плавающей точкой (в основном, подписывая сужающееся преобразование). В противном случае вы можете указать, что число действительно является плавающим, используя правильный суффикс;

float f = 12.3f;

Итак, подведем итог: необходимость указывать суффикс для longs и floats - это компромисс, который выбрали дизайнеры языка, чтобы сбалансировать необходимость указать, что именно число, с гибкостью преобразования чисел из один тип хранения в другой.

46
Perception

float и double могут предоставлять приблизительные значения представления только для некоторых значений. например 12,3 или 0,1

Разница в том, что float не такой точный (так как он имеет меньшую точность, потому что он меньше)

например.

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

23
Peter Lawrey

float fVariable = 12,3; Это хорошо. но когда вы используете только значение с плавающей точкой (без какого-либо идентификатора) в любом выражении, вам нужно сообщить компилятору, что значение является плавающим, поэтому мы используем суффикс "f" после значения. пример

float fl = 13f/5f; 

здесь 13 и 5 - значения с плавающей запятой.

4
kundan bora

В Java у нас есть много различных базовых типов переменных, поэтому, чтобы сделать его общим, у него есть некоторые функции по умолчанию. Например, если мы дадим ввод 16.02, он автоматически воспринимает его как двойной ввод. Поэтому, если вы хотите указать его как float, мы упоминаем, что 'f' после числа, или мы можем просто использовать:

float f = (float) 16.02;

или же

float f = 16.02f;

Точно так же мы должны упомянуть 16 l , если мы хотим, чтобы число сохранялось как длинный тип, иначе он автоматически выберет тип по умолчанию, то есть тип int.

1
Geetika Agarwal

Во время компиляции все числа с плавающей запятой (числа с десятичной запятой) по умолчанию удваиваются.

Поэтому, если вы не хотите, чтобы ваш номер удваивался, а просто хотите, чтобы он был с плавающей точкой, вы должны явно указать компилятору, добавив f илиFв конце литеральной константы.

1
Confuse

Float - это 32-битная IEEE 754 с плавающей точкой одинарной точности, а Double - 64-битная IEEE 754 с двойной точностью. Когда вы используете значение с десятичными точками, и если вы не укажете это значение равно 0,23f (особенно с плавающей запятой), Java идентифицирует его как двойное.

Для десятичных значений двойной тип данных обычно является выбором по умолчанию, принятым Java . Проверить это

0
BRjava