将java.lang.String转换为java.lang.Number

时间:2013-08-06 13:08:54

标签: java

我有一个String对象,我需要转换为java.lang.Number。

Number num = null;
Object cellContents = ".475";

如果我尝试直接将 cellContents 转换为数字

num = (Number) cellContents;

它引发了异常:

E[java.lang.ClassCastException: java.lang.String]:  : java.lang.ClassCastException: java.lang.String

我搜索过但无法得到一个完整的答案,我是如何实现这一目标的。 请帮忙!!!

6 个答案:

答案 0 :(得分:7)

您不能将字符串强制转换为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");

答案 1 :(得分:7)

你不能简单地将String转换为Number,因为它们不在同一层次结构中。但好消息是Java Wrapper API为你自动执行大部分任务,将有效的String转换为你想要的Wrapper并抛出NumberFormatException如果传递的String不是有效的Number或其他Wrapper。

你应该使用。

Integer.parseInt(String) throws NumberFormatException

OR

Double.parseDouble(String) throws NumberFormatException

它们分别返回Number Integer和Double以及ARE-A Number。

答案 2 :(得分:6)

您不能只是转换引用类型。您遇到异常,因为它指向的String对象不是Number 对象

但是,如果您知道它是String,则可以将引用转换为String。您可以使用Double.valueOf( String )Float.valueOf( String )将其转换为实际值。获得双倍后,您可以使用auto-boxing将其变为Double,即数字。

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 {
    ...
}

答案 3 :(得分:1)

尝试

num = new BigDecimal((String)cellContents);

答案 4 :(得分:1)

首先,您应该将对象转换为字符串。

您可以尝试以下代码:

Number num = null; 
Object cellContents = ".475";
num = cellContents.toString();  
num = (Number) num;

答案 5 :(得分:0)

你不能将“.475”投射到整数。但是,您可以使用

将其强制转换为Float或Double
float x = Float.parseFloat(".475");

double y  = Double.parseDouble(".475");

你应该更多地了解Java中的包装类和java中的AutoBoxing以获得基本的清晰。快乐编码:)