将java.lang.String转换为java.lang.Number
我有一个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 我搜索了一
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;