Java,不可能使对象浮动…为什么?
为什么会这样:Java,不可能使对象浮动…为什么?,java,casting,floating-point,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 andro
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个小时,所以我不得不将它转换为双精度,而不是浮点型,或者我有一个异常,因为
prova
是双精度,并且双精度不是浮点型的子类型
您可以从float literal开始:9.2f
(在这种情况下,prova
实际上是一个float
),或者,您可以这样做:
Float prova2 = ((Double) prova).floatValue();
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
因为你写的时候依赖自动装箱
Object prova = 9.2;
如果你想让它成为一个浮动,试试看
Object prova = 9.2f;
记住java.lang.Float和java.lang.Double是兄弟类型;常见的类型是java.lang.Number
如果要以任何格式表示数字,请使用API,例如,因为如果不指定,它将是双精度的。如果你想让它成为一个浮动,你需要
Object prova = 9.2F;
System.out.println(prova);
Float prova2 = (Float) prova;
System.out.println(prova2);
尝试将其强制转换为Float而不是Float
简单嗨,我也碰到了这个问题,花了很长时间才想出这个非常简单的解决方案。
对于遇到此问题且您可能不想或无权更改正在接收的对象的任何其他人,转换对象值的另一种方法是首先将双精度值转换为双精度变量类型。然后简单地投双浮球。。。示例:
(我没有测试过,但基于最初发布的问题进行了测试)
(这是我和自己一起工作的一个例子,希望这些例子将来能帮助别人)
对我来说,在我尝试使用时,这是一个错误:
Color3f((float)color.get(0), (float)color.get(1), (float)color.get(2))
如果您阅读了后者的异常文本(我假设是ClassCastException
),然后查看Float
和Double
的继承层次结构,答案应该是显而易见的。您还可以通过添加System.out.println(prova.getClass())来检查发生了什么代码>
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);
Color3f((float)color.get(0), (float)color.get(1), (float)color.get(2))