ява, невозможно приведение object к float ..... почему?

<p>почему это работает:</p><pre><code> object prova = 9.2; system.out.println(prova); double prova2 = (double) prova; system.out.println(prova2); </code></pre><p>а это не так?</p><pre><code>object prova = 9.2; system.out.println(prova); float prova2 = (float) prova; system.out.println(prova2); </code></pre><p>я потерял 1 час в приложении java для android из-за этой вещи, поэтому мне пришлось разыграть его в двойном, а затем в двойном числе в плавающей запятой, или у меня возникло исключение</p>

<p>потому что вы полагаетесь на автобокс, когда вы написали</p><pre><code>object prova = 9.2; </code></pre><p>если вы хотите, чтобы это был float, попробуйте</p><pre><code>object prova = 9.2f; </code></pre><p>помните, что java.lang.float и java.lang.double являются родственными типами; общий тип java.lang.number</p><p>если вы хотите выразить число в любом формате, используйте api, например <a href="http://download.oracle.com/javase/1.5.0/docs/api/java/lang/number.html#floatvalue%28%29">number.floatvalue ()</a> </p>

<p><code>9.2</code> является двойным литералом. попробуйте вместо этого <code>9.2f</code>.</p><pre><code>object prova = 9.2f; // float literal is auto-boxed to a float system.out.println(prova); float prova2 = (float) prova; // float can be cast to float, while double cannot system.out.println(prova2); </code></pre><p>сообщение об ошибке (которое вы, вероятно, должны были включить в свой вопрос) также хорошо объясняет это:</p><pre><code>exception in thread "main" java.lang.classcastexception: java.lang.double cannot be cast to java.lang.float </code></pre>

<p>поскольку <code>prova</code> является <code>double</code>, а<strong><code>double</code> не является подтипом <code>float</code></strong>.</p><p>либо вы можете начать с литерала с плавающей точкой: <code>9.2f</code> (в этом случае <code>prova</code> будет фактически <code>float</code>), либо вы можете сделать это следующим образом:</p><pre><code>float prova2 = ((double) prova).floatvalue(); </code></pre>

<p>потому что, если вы не укажете, это будет двойной. если вы хотите, чтобы это было поплавком, вам нужно</p><pre><code>object prova = 9.2f; system.out.println(prova); float prova2 = (float) prova; system.out.println(prova2); </code></pre>

<p>попробуйте привести его как<strong> <em>float</em> </strong>not<strong> <em>float</em> </strong> simple</p>