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

将java.lang.String转换为java.lang.Number,java,Java,我有一个String对象,需要转换为java.lang.Number Number num = null; Object cellContents = ".475"; 如果我尝试直接将单元格内容转换为数字 num = (Number) cellContents; 它抛出一个异常: E[java.lang.ClassCastException: java.lang.String]: : java.lang.ClassCastException: java.lang.String 我搜索了一

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

Number num = null;
Object cellContents = ".475";
如果我尝试直接将单元格内容转换为数字

num = (Number) cellContents;
它抛出一个异常:

E[java.lang.ClassCastException: java.lang.String]:  : java.lang.ClassCastException: java.lang.String
我搜索了一下,但没有得到一个关于如何实现这一目标的完整答案。 请帮忙

试试看

num = new BigDecimal((String)cellContents);

不能将字符串强制转换为
数字
,因为它们不是协变的(它们不属于同一继承层次结构)

您可以分别使用和将
字符串
转换为
浮点
双精度
,这在大多数情况下都是需要的

使用并创建包装类的实例

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

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

但是,如果您处理的是货币值或其他一些涉及浮点精度的值,则应使用
BigDecimal

BigDecimal number = new BigDecimal(".475");

您不能简单地将字符串直接转换为数字,因为它们不在同一层次结构中。但好消息是Java包装器API会自动为您完成大部分任务,即,将有效字符串转换为所需的包装器,并在传递的字符串不是有效的数字或其他包装器时引发NumberFormatException

你应该使用

Integer.parseInt(String) throws NumberFormatException


它们都分别返回整数和双精度数字,并且都是-A数字。

您不能仅强制转换引用类型。您将获得一个异常,因为它指向的字符串对象不是数字对象

但是,如果知道某个字符串是一个字符串,则可以将该引用强制转换为该字符串。您可以使用
Double.valueOf(String)
Float.valueOf(String)
将其转换为实值。一旦你得到了一个double,你可以用它把它变成一个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 {
    ...
}
不能将“.475”强制转换为整数。但是,您可以使用

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


您应该搜索更多关于Java中包装器类和Java中自动装箱的信息,以获得基本的清晰信息。快乐编码:)

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

您可以尝试以下代码:

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

为什么我们可以
cellContents.toString
?如果对象不是字符串,那么toString可以做各种事情。使用cast时,如果是其他内容,则会出现错误。@Thilo,当有很多基本内容可用时,向新程序员介绍BigDecimal好吗?你是说像浮点这样的“基本内容”?当然,如果你想让他们痛苦地学习,这不会把cellContents转换成BigDecimal对象吗。如果cellContents是浮点或整数怎么办?Integer.parseInt与提供的示例(“.475”)不起作用,因为.475不是整数。我通常是说,如果您有类似“474”的内容,则应使用整数,但您可以使用大小写。475“使用浮点或双精度。parseDouble()返回双精度,而不是字符串或数字。@SachinVerma。请编辑您的帖子以更正它。前面注释中指出的错误仍然存在。仍然不正确-Double.parseDouble()返回一个Double,而不是Double。自动装箱可能会掩盖这个细节。根据我看到的值,它们都是浮点或双精度的。也许我可以建议这个!!谢谢谢谢但我正在寻找一种更通用的方法,它可以简单地将给定对象解析为数字类型。所以我发现这是不可能的!!如果你能解释一下你为什么这么做?我可以帮助解决您的问题我有一个列,它是从数据库中的2列计算出来的。因为这是一个客户数据库,列被定义为date和float。将这两列分开,并显示计算列。
double y  = Double.parseDouble(".475");
Number num = null; 
Object cellContents = ".475";
num = cellContents.toString();  
num = (Number) num;