0

我有以下代码和成员值是类型对象,在此过程中 = long,我想将其转换为大十进制,当我尝试以下代码时出现错误:java.lang.Double 无法转换为 [C

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

4 回答 4

2

错误信息:

java.lang.Double cannot be cast to [C

告诉你这个演员表是非法的:

(char[]) memberValue

所以不要这样做。错误消息告诉你那memberValue是 a Double,所以这应该有效:

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

取决于声明的类型memberValue转换可能是完全没有必要的,尽管听起来声明的类型是Object. 或者,由于有一个BigDecimal接受字符串的构造函数,你可以尝试摆脱这个,尽管它并没有那么臭:

return new SwitchInputType<BigDecimal>(new BigDecimal(memberValue.toString()));
于 2013-03-19T20:43:57.340 回答
2

表示类型“[C数组char”,实际上,您不能将 aDouble转换为 的数组char,也不应该这样做。根据消息,memberValue是一个Double,所以你只想做

return new SwitchInputType<BigDecimal>(new BigDecimal(memberValue));
于 2013-03-19T20:44:29.377 回答
0

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

new BigDecimal(memberValue)

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

于 2013-03-19T20:43:30.750 回答
0

错误消息意味着它memberValue是一个java.lang.Double对象,并且您正在尝试将其强制转换为char[]. 那是行不通的,因为 aDouble不是 a char[]

在这种情况下,您可以删除演员表,然后调用doubleValue()对象Double

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

这样,您使用的构造函数BigDecimal采用 adouble而不是 a char[]

如果类型memberValueObject,您必须Double先将其转换为:

((Double)memberValue).doubleValue()
于 2013-03-19T20:44:03.497 回答