将BigDecimal Object转换为double值

时间:2014-10-30 12:26:28

标签: java casting double bigdecimal

我正在使用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

有关如何正确投射此对象的任何建议吗?

感谢您的回复!

5 个答案:

答案 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)