我有一个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
我搜索过但无法得到一个完整的答案,我是如何实现这一目标的。 请帮忙!!!
答案 0 :(得分:7)
您不能将字符串强制转换为Number
,因为它们不是协变的(它们不属于同一继承层次结构)。
您可以分别使用Float#parseFloat()
和Double#parseDouble()
将String
转换为float
或double
,这在大多数情况下都是您需要的。
使用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或Doublefloat x = Float.parseFloat(".475");
或
double y = Double.parseDouble(".475");
你应该更多地了解Java中的包装类和java中的AutoBoxing以获得基本的清晰。快乐编码:)