Я не знаю, почему f или F помещаются после значений float на Java или на другие языки? например,
float fVariable = 12.3f;
любые функции, отличные от указания того, что это значение поплавка?
Я не знаю, почему f или F помещаются после значений float на Java или на другие языки? например,
float fVariable = 12.3f;
любые функции, отличные от указания того, что это значение поплавка?
по умолчанию 12.3
является double
literal, поэтому, чтобы сообщить компилятору, что он явно float
→ использует f
или f
Увидев, что в вашей программе есть только так много способов представить число, разработчикам Java пришлось выбирать и назначать каждую форму в наиболее распространенный прецедент. Для тех форм, которые выбраны по умолчанию, суффикс, который обозначает точный тип, является необязательным.
Итак, когда вы вводите 12
в свою программу, это int literal, в отличие от 12L
, который длинный.
И когда вы набираете 12.3
, это двойной литерал, а не 12.3F
, который является float.
Итак, где это актуально? В первую очередь, при обработке понижающих преобразований или сужении конверсий. Всякий раз, когда вы опускаете длинный путь до int или double-float, существует вероятность потери данных. Таким образом, компилятор заставит вас указать, что вы действительно хотите выполнить сужение преобразования, сигнализируя ошибку компиляции для чего-то вроде этого:
float f = 12.3;
Поскольку 12.3 представляет собой double, вы должны явно передать его в float (в основном, подписываясь на сужение преобразования). В противном случае вы могли бы указать, что число действительно является float, используя правильный суффикс;
float f = 12.3f;
Так что слишком суммировать, нужно указать суффикс для longs и floats - это компромисс, который выбрали разработчики языка, чтобы сбалансировать необходимость указать, что именно такое число, с гибкостью преобразования чисел из одного типа хранилища в другой.
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
float fVariable = 12.3; Это хорошо. но когда вы используете только значение float (без какого-либо идентификатора) в любом выражении, которое вам нужно сообщить компилятору, это значение равно float, поэтому мы используем суффикс "f" после значения. Пример
float fl = 13f/5f;
здесь 13 и 5 - значения с плавающей запятой.
Во время компиляции все числа с плавающей запятой (числа с десятичной точкой) по умолчанию удваиваются.
Поэтому, если вы не хотите, чтобы ваш номер удваивался и просто хотел, чтобы он был как float, вы должны явно сообщить компилятору, добавив f или F в конец константы литерала.
Float - это 32-битная 32-битная плавающая точка IEEE 754 с двойной точностью, а Double - 64-битная с плавающей точкой IEEE 754 с двойной точностью. Когда вы используете значение с десятичными точками, и если вы не укажете его как 0,23f (в частности, float), java идентифицирует его как double.
Для десятичных значений двойной тип данных обычно является выбором по умолчанию, выбранным java. Проверить это