Не могу поместить Двойное число в переменную BigDecimal

Я использую переменную Double, которая содержит цену товара. Эта переменная хранится в базе данных postgresql под столбцом типа money. Я использую функцию SQL setBigDecimal (position, value). В другой части я использую JSpinner в качестве входных данных.

Double current = 0.0;
Double min = (double) Integer.MIN_VALUE;
Double max = (double) Integer.MAX_VALUE;
Double step = 0.1;

JSpinner priceSpinner = new JSpinner(new SpinnerNumberModel(current, min, max, step));

Когда пользователь нажимает на кнопку, я получаю введенное пользователем значение и помещаю его в базу данных с помощью SQL-запроса.

 insertStmt.setBigDecimal(position,BigDecimal.valueOf((double) priceSpinner.getValue()));

Но я получил эту маленькую ошибку,

Exception in thread "AWT-EventQueue-0" java.lang.ClassCastException: java.math.BigDecimal cannot be cast to java.lang.Double

2 ответа

Решение

Эта программа иллюстрирует преобразование в обоих направлениях между Double и BigDecimal:

import java.math.BigDecimal;

public class Test {
  public static void main(String[] args) {
    Double d1 = 1.3;
    BigDecimal bd1 = BigDecimal.valueOf(d1.doubleValue());
    Double d2 = bd1.doubleValue();
    System.out.println(d2);
  }
}

Обратите внимание, что преобразование в Double может быть неточным.

Очевидно priceSpinner.getValue() возвращается BigDecimal и вы пытаетесь преобразовать его в double а затем вернуться к BigDecimal,

Почему бы тебе просто не сделать?

insertStmt.setBigDecimal(position, (BigDecimal) priceSpinner.getValue());
Другие вопросы по тегам