2015-01-29 6 views
0

Я хочу сохранить двойное значение как 100.55, потому что оно сохранит значение цены. Этот проект - весенний mvc с спящим подключением к базе данных mysql. Я делал это по моделихранить двойное значение с точностью, используя весеннюю модель и спящий режим

@Column(name = "GRAND_TOTAL_AMOUNT",length=8,precision=2) 
private Double grandTotalAmount; 

не получилось желаемого результата. Предложить решения?

+0

* не получают желаемого результата * - Что вы желаемого результата, и что вы получаете взамен? –

ответ

0

Вы не указали свою проблему четко, однако в вашем сопоставлении есть одна ошибка. Вы должны использовать precision и scale вместо длины, так как длина предназначена для строковых значений, так что вы должны изменить к

@Column(name = "GRAND_TOTAL_AMOUNT", precision=8, scale=2) 
private Double grandTotalAmount; 

Заметим также, что при работе с деньгами BigDecimal является предпочтительным типом над двойником. Отображение может remaing тот же

@Column(name = "GRAND_TOTAL_AMOUNT", precision = 8, scale = 2) 
private BigDecimal grandTotalAmount; 

Проверьте этот блог, чтобы узнать больше https://blogs.oracle.com/CoreJavaTechTips/entry/the_need_for_bigdecimal

+0

Я пробовал ваше решение и не работал над двойным. Поэтому я хочу сохранить значение валюты в двойном поле, например, 100.99 Но когда я далее делаю какое-то деление, а затем сохраняю его, вы видите более двух мест десятичного числа, например 50.369852. Я хочу, чтобы он по умолчанию сохранял значение как 50.37. Возможно ли это с двойным? –

+0

, если вы исправите свое сопоставление, чтобы использовать точность и масштаб, вы можете сделать это с помощью double или BigDecimal, но вам нужно округлить его до того, как он будет продолжаться, самым простым было бы добавить логику округления в сеттер, например. public void setGrandTotalAmount (BigDecimal decTest) { this.decTest = decTest.setScale (3, RoundingMode.HALF_UP)); } или эквивалент для двойного. Тогда ваш десятичный формат должен быть последовательным –

Смежные вопросы