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

<p>я не знаю, почему f или f ставятся после значений с плавающей запятой в java или других языках? например,</p><pre><code>float fvariable = 12.3f; </code></pre><p>какие-либо функции, кроме указания, что это значение с плавающей запятой?</p>

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

<p>поскольку существует очень много способов представления числа в вашей программе, разработчики java должны были выбрать и назначить каждую форму для наиболее распространенного варианта использования. для форм, выбранных по умолчанию, <em>суффикс</em>, обозначающий точный тип, является необязательным.</p><ul> <li>для целочисленных литералов (int, long) по умолчанию используется <em>int</em>. по очевидным причинам </li> <li>для литералов с плавающей точкой (float, double) значением по умолчанию является <em>double</em> . поскольку использование double потенциально позволяет использовать арифметику <em>safer</em> для сохраненных значений </li> </ul><p>итак, когда вы набираете <code>12</code> в своей программе, это литерал <em>int</em>, а не <code>12l</code>, который является <em>long</em> . а когда вы набираете <code>12.3</code>, это литерал <em>double</em> , в отличие от <code>12.3f</code>, который является <em>float</em>.</p><p>так где же это актуально? в первую очередь при обработке откликов или сужении конверсий. всякий раз, когда вы понижаете long до int или до двойного с плавающей точкой, существует вероятность потери данных. таким образом, компилятор заставит вас указать, что вы<strong> <em>действительно</em> </strong>хотите выполнить сужающее преобразование, сигнализируя об ошибке компиляции для чего-то вроде этого:</p><pre><code>float f = 12.3; </code></pre><p>поскольку 12.3 представляет двойное число, вы должны явно преобразовать его в число с плавающей точкой (в основном, подписывая сужающееся преобразование). в противном случае вы можете указать, что число действительно является плавающим, используя правильный суффикс;</p><pre><code>float f = 12.3f; </code></pre><p>итак, подведем итог: необходимость указывать суффикс для <em>longs</em> и <em>floats</em> - это компромисс, который выбрали дизайнеры языка, чтобы сбалансировать необходимость указать, что именно число, с гибкостью преобразования чисел из один тип хранения в другой.</p>

<p><code>float</code> и <code>double</code> могут предоставлять приблизительные значения представления только для некоторых значений. например 12,3 или 0,1</p><p>разница в том, что float не такой точный (так как он имеет меньшую точность, потому что он меньше)</p><p>например.</p><pre><code>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)); </code></pre><p>печать</p><pre><code>0.1f == 0.1 is false 0.1f is actually 0.100000001490116119384765625 0.1 is actually 0.1000000000000000055511151231257827021181583404541015625 </code></pre><p>таким образом, <code>0.1</code> является ближайшим представлением в <code>double</code>, а <code>0.1f</code> является ближайшим представлением в <code>float</code></p>

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

<p>в java у нас есть много различных базовых типов переменных, поэтому, чтобы сделать его общим, у него есть некоторые функции по умолчанию. например, если мы дадим ввод 16.02, он автоматически воспринимает его как двойной ввод. поэтому, если вы хотите указать его как float, мы упоминаем, что<strong> 'f' </strong>после числа, или мы можем просто использовать:</p><blockquote> <p><code>float f = (float) 16.02;</code></p> </blockquote><p>или же</p><blockquote> <p><code>float f = 16.02f;</code></p> </blockquote><p>точно так же мы должны упомянуть 16<strong> l </strong>, если мы хотим, чтобы число сохранялось как длинный тип, иначе он автоматически выберет тип по умолчанию, то есть тип int.</p>

<p>во время компиляции все числа с плавающей запятой (числа с десятичной запятой) по умолчанию удваиваются.</p><p>поэтому, если вы не хотите, чтобы ваш номер удваивался, а просто хотите, чтобы он был с плавающей точкой, вы должны явно указать компилятору, добавив<strong> f </strong>или<strong>f</strong>в конце литеральной константы.</p>

<p>float - это 32-битная ieee 754 с плавающей точкой одинарной точности, а double - 64-битная ieee 754 с двойной точностью. когда вы используете значение с десятичными точками, и если вы не укажете это значение равно 0,23f (особенно с плавающей запятой), java идентифицирует его как двойное.</p><p>для десятичных значений двойной тип данных обычно является выбором по умолчанию, принятым java . <a href="http://docs.oracle.com/javase/tutorial/java/nutsandbolts/datatypes.html">проверить это</a> </p>