簡體   English   中英

Java,不可能將對象強制轉換為浮動.....為什么?

[英]Java, impossible cast Object to Float.....why?

為什么這樣做:

 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 小時,所以我不得不將它轉換為雙精度而不是浮點數中的雙精度,否則我有一個例外

因為您在編寫時依賴於自動裝箱

Object prova = 9.2;

如果你想讓它成為一個浮動,試試

Object prova = 9.2f;

記住 java.lang.Float 和 java.lang.Double 是兄弟類型; 常見的類型是 java.lang.Number

如果您想以任何格式表示數字,請使用 API,例如Number.floatValue()

因為prova是一個Double ,而Double不是Float的子類型

要么你可以從一個浮點文字開始: 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.2F;
System.out.println(prova);
Float prova2 = (Float) prova;
System.out.println(prova2);

嘗試將其轉換為Float not float簡單

嗨,我也遇到了這個問題,我花了很長時間才想出這個非常簡單的解決方案。 對於遇到此問題並且您可能不想或無法更改您正在接收的對象的任何其他人,轉換對象值的替代方法是首先將您的 Double 值轉換為 double 變量類型。 然后簡單地將 double 轉換為浮動...示例:

(我沒有測試過這個,但根據最初發布的問題做了這個)

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

對我來說,這之前在我嘗試使用時會出錯:

Color3f((float)color.get(0), (float)color.get(1), (float)color.get(2))

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM