2014-10-30 29 views
-2

我查詢數據庫的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和我想將其轉換爲純雙。使用投射不起作用,並給我一個ClassCastException

任何建議如何正確地施加此對象?

我感謝您的回覆!

+0

爲什麼你想轉換爲雙倍你會失去精度? – brso05 2014-10-30 12:27:48

回答

4
result.setResultValueDouble(((BigDecimal)row.get("AMOUNT")).doubleValue()); 

對象物的轉換並不改變對象的類型,只是表達的類型,你用它來指代它,所以它不是BigDecimal轉換爲Double,因爲一個BigDecimal 不是 a Double。相反,請調用BigDecimal的doubleValue()方法。

2

您可以使用BigDecimal.doubleValue()方法。

public double doubleValue()

將此BigDecimal轉換爲double。此轉換類似於Java™語言規範第5.1.3節中定義的從double到float的縮減基本轉換:如果此BigDecimal的幅度太大表示爲double,則它將轉換爲Double.NEGATIVE_INFINITY或Double .POSITIVE_INFINITY視情況而定。請注意,即使返回值是有限的,該轉換也會丟失有關BigDecimal值精度的信息。

0

使用BigDecimal的doubleValue()。 BigDecimal類有一個doubleValue(),它將返回等價的double值。但是如果精度很重要,我不會推薦使用double來加倍,否則double和BigDecimal會失去精度。

result.setResultValueDouble(row.get("AMOUNT").doubleValue()); 
0

如果您需要處理空值你可能需要做這樣的事情:

BigDecimal amt = (BigDecimal)row.get("AMOUNT"); 
result.setResultValueDouble(amt != null ? amt.doubleValue() : 0.0)