2014-10-30 2 views
-2

Я запрашивая базу данных с помощью JDBC соединения:Преобразовать BigDecimal объекта к удвоенному значению

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

ответ

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

Бросок на объект не меняет тип объекта, только тип выражения вы используете, чтобы обратиться к нему, поэтому он не может преобразовать BigDecimal к двойному, так как BigDecimal не a Двойной. Вместо этого вызовите метод doubleValue() BigDecimal.

2

Вы можете использовать метод BigDecimal.doubleValue().

public double doubleValue()

преобразует этот BigDecimal в двойной. Это преобразование похоже на сужение примитивного преобразования из double в float, как определено в разделе 5.1.3 Спецификации языка Java ™: если эта BigDecimal имеет слишком большую величину, представляющую собой двойную, она будет преобразована в Double.NEGATIVE_INFINITY или Double .POSITIVE_INFINITY, если это необходимо. Обратите внимание, что даже когда возвращаемое значение является конечным, это преобразование может потерять информацию о точности значения BigDecimal.

0

Использовать doubleValue() BigDecimal. Класс BigDecimal имеет doubleValue(), который вернет эквивалентное двойное значение. Но я бы не рекомендовал, чтобы кастинг был двойным, если точность важна, вы потеряете точность с помощью double и BigDecimal.

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

Если вам нужно для обработки нулей вам может потребоваться сделать что-то вроде этого:

BigDecimal amt = (BigDecimal)row.get("AMOUNT"); 
result.setResultValueDouble(amt != null ? amt.doubleValue() : 0.0) 
Смежные вопросы