我正在使用jdbc连接查询数据库:
List<Map<String, Object>> rows = jdbcTemplate.queryForList(SELECT_QUERY);
for(Map row : rows) {
Results result = new Results();
result.setResultValueDouble((Double)row.get("AMOUNT"));
//add the data object to the list
resultList.add(result);
}
但是,我查询的对象是在BigDecimal中,我想将它转换为普通的double。使用演员表不起作用,并给我一个ClassCastException
。
有关如何正确投射此对象的任何建议吗?
感谢您的回复!
答案 0 :(得分:4)
result.setResultValueDouble(((BigDecimal)row.get("AMOUNT")).doubleValue());
对象的强制转换不会更改对象的类型,只会更改用于引用它的表达式的类型,因此它不能将BigDecimal转换为Double,因为BigDecimal 不是双倍。相反,请调用BigDecimal的doubleValue()
方法。
答案 1 :(得分:3)
您可以使用BigDecimal.doubleValue()
方法。
public double doubleValue()
将此BigDecimal转换为double。这种转换类似于在Java™语言规范的5.1.3节中定义的从double到float的缩小原语转换:如果此BigDecimal具有太大的幅度表示为double,则它将被转换为Double.NEGATIVE_INFINITY或Double .POSITIVE_INFINITY视情况而定。请注意,即使返回值是有限的,此转换也可能会丢失有关BigDecimal值精度的信息。
答案 2 :(得分:1)
我会教你钓鱼,我想:
http://docs.oracle.com/javase/7/docs/api/java/math/BigDecimal.html
转到方法,检查哪一个返回双精度,等等:doubleValue()
答案 3 :(得分:0)
使用BigDecimal的doubleValue()。 BigDecimal类有一个doubleValue(),它将返回等效的double值。但是,如果精度很重要,我就不会推荐使用加倍,你将失去精确度,使用double和BigDecimal。
result.setResultValueDouble(row.get("AMOUNT").doubleValue());
答案 4 :(得分:0)
如果您需要处理空值,您可能需要执行以下操作:
BigDecimal amt = (BigDecimal)row.get("AMOUNT");
result.setResultValueDouble( amt != null ? amt.doubleValue() : 0.0)