簡體   English   中英

將java.lang.String轉換為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轉換為floatdouble ,這在大多數情況下都是您需要的。

使用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.

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