2

我有一个字符串对象,我需要转换为 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

我进行了搜索,但无法获得关于如何实现这一目标的完整答案。请帮忙!!!

4

6 回答 6

7

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

但是,如果您知道它是字符串,则可以将引用转换为字符串。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 {
    ...
}
于 2013-08-06T13:13:44.127 回答
7

您不能将 String 强制转换为 a Number,因为它们不是协变的(它们不属于同一继承层次结构)。

您可以分别转换Stringtofloatdouble使用Float#parseFloat()and Double#parseDouble(),这在大多数情况下都是您需要的。

使用Float#valueOf(String)Double#valueOf(String)创建包装类的实例。

因此,根据您的需要,您可以使用其中的任何一个。我将在这里展示第一种parseXXX方法:

float strToFloat = Float.parseFloat(".475");
double strToDouble = Double.parseDouble(".475");


但是,如果您正在处理货币价值或其他一些需要关注浮点精度的价值,那么您应该BigDecimal改用:

BigDecimal number = new BigDecimal(".475");
于 2013-08-06T13:12:54.647 回答
7

您不能简单地将字符串直接转换为数字,因为它们不在同一层次结构中。但好消息是 Java Wrapper API 会自动为您完成大部分任务 IE,将有效的字符串转换为您想要的 Wrapper,如果通过则抛出 NumberFormatException String 不是有效的 Number 或其他 Wrapper。

你应该使用。

Integer.parseInt(String) throws NumberFormatException

或者

Double.parseDouble(String) throws NumberFormatException

它们都分别返回 Number Integer 和 Double 并且都是 ARE-A Number。

于 2013-08-06T13:12:59.253 回答
1

尝试

num = new BigDecimal((String)cellContents);
于 2013-08-06T13:10:05.197 回答
1

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

您可以尝试以下代码:

Number num = null; 
Object cellContents = ".475";
num = cellContents.toString();  
num = (Number) num;
于 2016-06-30T10:33:39.283 回答
0

您不能将“.475”转换为整数。但是,您可以将其转换为 Float 或 Double 使用

float x = Float.parseFloat(".475");

或者

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

您应该搜索更多有关 Java 中的 Wrapper Classes 和 Java 中的 AutoBoxing 的信息,以了解基本情况。快乐编码:)

于 2013-08-06T13:45:21.343 回答