![](/img/trans.png)
[英]JasperReports: getting java.lang.ClassCastException: java.lang.String cannot be cast to java.lang.Number
[英]Convert java.lang.String to java.lang.Number
我有一個String對象,我需要轉換為java.lang.Number。
Number num = null;
Object cellContents = ".475";
如果我嘗試直接將cellContents轉換為Number,
num = (Number) cellContents;
它引發了一個異常:
E[java.lang.ClassCastException: java.lang.String]: : java.lang.ClassCastException: java.lang.String
我搜索但無法得到一個完整的答案,我是如何實現這一目標的。 請幫忙!!!
您不能將字符串強制轉換為Number
,因為它們不是協變的(它們不屬於同一繼承層次結構)。
您可以分別使用Float#parseFloat()
和Double#parseDouble()
將String
轉換為float
或double
,這在大多數情況下都是您需要的。
使用Float#valueOf(String)
和Double#valueOf(String)
創建包裝類的實例。
因此,根據您的需要,您可以使用其中任何一種。 我將在這里展示第一個parseXXX
方法:
float strToFloat = Float.parseFloat(".475");
double strToDouble = Double.parseDouble(".475");
BigDecimal
:
BigDecimal number = new BigDecimal(".475");
您不能簡單地將String轉換為Number,因為它們不在同一層次結構中。但好消息是Java Wrapper API為您自動完成大部分任務,將有效的String轉換為您想要的Wrapper並拋出NumberFormatException如果通過String不是有效的Number或其他Wrapper。
你應該用。
Integer.parseInt(String) throws NumberFormatException
要么
Double.parseDouble(String) throws NumberFormatException
它們分別返回Number Integer和Double以及ARE-A Number。
您不能只是轉換引用類型。 您遇到異常,因為它指向的String對象不是Number 對象 。
但是,如果您知道它是String,則可以將引用轉換為String。 您可以使用Double.valueOf( String )
或Float.valueOf( String )
將其轉換為實際值。 一旦你得到一個雙,你可以使用自動裝箱把它變成一個雙,這是一個數字。
Object cellContents = ".475";
Number num = null;
if ( cellContents instanceof String ) {
try {
double d = Double.valueOf( (String) cellContents );
num = (Double) d; // Auto-boxing
}
catch ( NumberFormatException e ) {
...
}
}
else {
...
}
嘗試
num = new BigDecimal((String)cellContents);
首先,您應該將對象轉換為字符串。
你可以嘗試類似下面的代碼:
Number num = null;
Object cellContents = ".475";
num = cellContents.toString();
num = (Number) num;
你不能把“.475”投射到整數。 但是您可以使用它將其轉換為Float或Double
float x = Float.parseFloat(".475");
要么
double y = Double.parseDouble(".475");
您應該更多地了解Java中的Wrapper Classes和java中的AutoBoxing以獲得基本的清晰。 快樂編碼:)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.