2013-03-19 89 views
0

我有以下代码和成员值是类型对象,并在此过程=长,我想将其转换为大十进制,当我尝试下面的代码时,我得到的错误:java .lang.Double不能转换为[C强制类型错误从长到十进制类型对象

} else if (typeName.equals("java.math.BigDecimal"))) { 
     return new SwitchInputType<BigDecimal>(new BigDecimal((char[]) memberValue)); 
+1

什么是'memberValue'的类型? – sircapsalot 2013-03-19 20:43:23

回答

2

错误消息:

java.lang.Double cannot be cast to [C 

告诉你,这个转换是非法的:

(char[]) memberValue 

所以不要去做。该错误消息告诉你,memberValueDouble,所以这应该工作:

return new SwitchInputType<BigDecimal>(new BigDecimal((Double) memberValue)); 

取决于memberValue声明类型转换可以是完全没有必要的,尽管它听起来声明的类型为Object。或者,因为有一个BigDecimal构造函数接受字符串,你可以尝试用这种蒙混过关,但它不是真的任何异味少:

return new SwitchInputType<BigDecimal>(new BigDecimal(memberValue.toString())); 
0

如果您收到该错误,则表示memberValue是Double。在这种情况下,您应该只使用

new BigDecimal(memberValue) 

但我必须看到更多的代码才能确定。

0

错误消息意味着memberValue是一个java.lang.Double对象,你正试图将其转换为char[]。这是行不通的,因为Double不是char[]

在这种情况下,你可以删除投,和Double对象调用doubleValue()

return new SwitchInputType<BigDecimal>(new BigDecimal(memberValue.doubleValue())); 

这样,你正在使用的BigDecimal,需要一个double而不是char[]构造。

如果memberValue类型为Object,你必须将它转换为Double第一:

((Double)memberValue).doubleValue() 
2

[C代表型“char阵”,而事实上,你不能施放Doublechar的数组,也不应该。据消息,memberValueDouble,所以你只想做

return new SwitchInputType<BigDecimal>(new BigDecimal(memberValue)); 
+0

谢谢,但是当我尝试你的建议,我得到以下DT错误构造函数BigDecimal(Object)是未定义的,任何想法? – 2013-03-19 21:03:09