it-swarm.com.ru

Ява, невозможно приведение Object к Float ..... почему?

Почему это работает:

 Object prova = 9.2;
 System.out.println(prova);
 Double prova2 = (Double) prova;
 System.out.println(prova2);

А это не так?

Object prova = 9.2;
System.out.println(prova);
Float prova2 = (Float) prova;
System.out.println(prova2);

Я потерял 1 час в приложении Java для Android из-за этой вещи, поэтому мне пришлось разыграть его в двойном, а затем в двойном числе в плавающей запятой, или у меня возникло исключение

17
Sgotenks

Потому что вы полагаетесь на автобокс, когда вы написали

Object prova = 9.2;

Если вы хотите, чтобы это был Float, попробуйте

Object prova = 9.2f;

Помните, что Java.lang.Float и Java.lang.Double являются родственными типами; общий тип Java.lang.Number

Если вы хотите выразить число в любом формате, используйте API, например Number.floatValue ()

17
Dilum Ranatunga

9.2 является двойным литералом. Попробуйте вместо этого 9.2f.

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);

Сообщение об ошибке (которое вы, вероятно, должны были включить в свой вопрос) также хорошо объясняет это:

Exception in thread "main" Java.lang.ClassCastException: 
    Java.lang.Double cannot be cast to Java.lang.Float
15
Isaac Truett

Поскольку prova является Double, аDouble НЕ ЯВЛЯЕТСЯ ПОДТИПОМ Float.

Либо вы можете начать с литерала с плавающей точкой: 9.2f (в этом случае prova будет фактически Float), либо вы можете сделать это следующим образом:

Float prova2 = ((Double) prova).floatValue();
11
aioobe

Потому что, если вы не укажете, это будет двойной. Если вы хотите, чтобы это было поплавком, вам нужно

Object prova = 9.2F;
System.out.println(prova);
Float prova2 = (Float) prova;
System.out.println(prova2);
2
dfb

Попробуйте привести его какFloatnotfloat Simple

0
Cameron Rasto