Java,不可能将对象转换为Float .....为什么?

时间:2011-05-12 16:05:33

标签: java casting floating-point

为什么会这样:

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

我在我的java android应用程序中丢失了1小时这个东西的原因所以我不得不把它放在一个double中,而不是浮动中的double或者我有异常

6 个答案:

答案 0 :(得分:17)

因为您在编写

时依赖于自动装箱
Object prova = 9.2;

如果您希望它成为Float,请尝试

Object prova = 9.2f;

请记住,java.lang.Float和java.lang.Double是兄弟类型;常见的类型是java.lang.Number

如果您想以任何格式表达数字,请使用API​​,例如Number.floatValue()

答案 1 :(得分:15)

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

答案 2 :(得分:12)

由于provaDouble Double不是Float 的子类型。

要么你可以从浮点字面开始:9.2f(在这种情况下prova实际上是Float),或者你可以这样:

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

答案 3 :(得分:2)

因为如果你没有指定,它将是一个双倍。如果你想要它是一个浮动,你需要

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

答案 4 :(得分:0)

尝试将其转换为 浮动 而不是 浮动 简单

答案 5 :(得分:0)

嗨,我也遇到了这个问题,我花了很长时间才提出这个非常简单的解决方案。 对于遇到此问题但您可能不想或无法更改正在接收的对象的其他任何人,转换对象值的另一种方法是先将Double值转换为double变量类型。然后只需将double浮动即可...示例:

(我尚未对此进行测试,但基于最初发布的问题进行了此操作)

random.nextInt()

(这是我与自己一起工作的一个示例,希望这些示例将来对其他人有帮助)

Object prova = 9.2;
System.out.println(prova);
double dblValProva = prova;
float pova2 = (float) dblValProva ;
System.out.println(prova2);

对我来说,以前尝试使用时会出现错误:

JSONArray color // This is a JSON array containing 3 values... 
//for instance [ 0.501, 0.501, 0.0 ]
double r = (Double) color.get(0);
double g = (Double) color.get(1);
double b = (Double) color.get(2);
Color3f floorColor = new Color3f((float)r, (float)g, (float)b);