Java, невозможно лить объект для 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 application this this, поэтому мне пришлось отдать его в двойном и двойном в float или у меня было исключение
Ответы
Ответ 1
Потому что вы полагаетесь на autoboxing, когда пишете
Object prova = 9.2;
Если вы хотите, чтобы это был Float, попробуйте
Object prova = 9.2f;
Помните, что java.lang.Float и java.lang.Double являются родственными типами; общим типом является java.lang.Number
Если вы хотите выразить номер в любом формате, используйте API, например Number.floatValue()
Ответ 2
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
Ответ 3
Поскольку prova
является Double
, а Double
не является подтипом Float
.
Либо вы можете начать с литерала с плавающей точкой: 9.2f
(в этом случае prova
на самом деле будет Float
), или вы можете это сделать так:
Float prova2 = ((Double) prova).floatValue();
Ответ 4
Потому что, если вы не укажете, это будет двойным. Если вы хотите, чтобы он был плавающим, вам нужно
Object prova = 9.2F;
System.out.println(prova);
Float prova2 = (Float) prova;
System.out.println(prova2);
Ответ 5
Попробуйте использовать его как Float не float
Простой