как конвертировать float в int с помощью java

<p>я использовал следующую строку для преобразования float в int, но это не так точно, как хотелось бы:</p><pre><code> float a=8.61f; int b; b=(int)a; </code></pre><p>результат: <code>8</code> (должен быть <code>9</code>)</p><p>когда <code>a = -7.65f</code>, результат будет: <code>-7</code> (должен быть <code>-8</code>)</p><p>какой лучший способ сделать это?</p>

<p>использование <code>math.round()</code> округляет число с плавающей точкой до ближайшего целого числа.</p>

<p>на самом деле, есть разные способы уменьшить число с плавающей точкой до int, в зависимости от того, какого результата вы хотите достичь: (для int <code>i</code>, float <code>f</code>)</p><ul> <li><p>round (ближайшее целое число к заданному float)</p> <pre><code>i = math.round(f); f = 2.0 -> i = 2 ; f = 2.22 -> i = 2 ; f = 2.68 -> i = 3 f = -2.0 -> i = -2 ; f = -2.22 -> i = -2 ; f = -2.68 -> i = -3 </code></pre> <p>примечание: по контракту это равно <code>(int) math.floor(f + 0.5f)</code></p></li> <li><p>усечь (то есть отбросить все после десятичной точки)</p> <pre><code>i = (int) f; f = 2.0 -> i = 2 ; f = 2.22 -> i = 2 ; f = 2.68 -> i = 2 f = -2.0 -> i = -2 ; f = -2.22 -> i = -2 ; f = -2.68 -> i = -2 </code></pre></li> <li><p>ceil/floor (целое число всегда больше/меньше заданного значения <strong>, если</strong> имеет дробную часть)</p> <pre><code>i = (int) math.ceil(f); f = 2.0 -> i = 2 ; f = 2.22 -> i = 3 ; f = 2.68 -> i = 3 f = -2.0 -> i = -2 ; f = -2.22 -> i = -2 ; f = -2.68 -> i = -2 i = (int) math.floor(f); f = 2.0 -> i = 2 ; f = 2.22 -> i = 2 ; f = 2.68 -> i = 2 f = -2.0 -> i = -2 ; f = -2.22 -> i = -3 ; f = -2.68 -> i = -3 </code></pre></li> </ul><p>для округления значений <em>положительные</em> вы также можете просто использовать <code>(int)(f + 0.5)</code>, который в этих случаях работает точно как <code>math.round</code> (согласно документу).</p><p>теоретически вы можете использовать <code>math.rint(f)</code> для округления, но <code>rint</code> не округляет 0.5 вверх, он округляет его вверх или вниз, в зависимости от того, какое из нижних или верхних целых является четным, поэтому в большинстве случаев бесполезно.</p><p>увидеть</p><p> <a href="http://mindprod.com/jgloss/round.html">http://mindprod.com/jgloss/round.html</a> </p><p> <a href="http://docs.oracle.com/javase/6/docs/api/java/lang/math.html">http://docs.oracle.com/javase/6/docs/api/java/lang/math.html</a> </p><p>для получения дополнительной информации и некоторых примеров.</p>

<p><code>math.round(value)</code> округляет значение до ближайшего целого числа.</p><p>использование </p><pre><code>1) b=(int)(math.round(a)); 2) a=math.round(a); b=(int)a; </code></pre>

<p>используйте <code>math.round(value)</code> тогда после типа приведите его к целому числу.</p><pre><code>float a = 8.61f; int b = (int)math.round(a); </code></pre>

<p>math.round также возвращает целочисленное значение, поэтому вам не нужно типизировать.</p><pre><code>int b = math.round(float a); </code></pre>

<p>как по мне, проще:<strong> (int) (a +.5) </strong>// a это float. вернуть округленное значение.</p><p><em>не зависит от типов java math.round ()</em></p>