Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/shell/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/ms-access/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java,不可能使对象浮动…为什么?_Java_Casting_Floating Point - Fatal编程技术网

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