2015-01-29 1 views
0

가격 값을 저장하기 때문에 double 값을 100.55로 저장하려고합니다. 이 프로젝트는 spring mvc이며 최대 절전 모드는 mysql 데이터베이스에 연결된다. 나는 모형으로 이것을하고 있었다스프링 모델과 최대 절전 모드를 사용하여 double 값을 정밀도로 저장

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

원하는 결과를 얻지 못한다. 솔루션 제안?

+0

* 원하는 결과 * 못하고 - 어떤 원하는 결과는 당신이 대신 무엇을 얻고 있습니까? –

답변

0

문제를 명확하게 언급하지 않았지만 매핑에 실수가 하나 있습니다. 돈을 다룰 때 길이 문자열 값에 대한 의미로 당신은, 길이 대신 precisionscale를 사용한다, 그래서 당신은 또한

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

참고 변경해야합니다, BigDecimal를 두 번 이상 선호하는 유형입니다. 매핑은 배울 수있는 같은

@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와 같이 소수점 이하 2 자리가 저장됩니다. 기본적으로 값을 50.37로 저장해야합니다. 그것은 두 배로 가능합니까? –

+0

정밀도와 배율을 사용하도록 매핑을 수정 한 경우 double 또는 BigDecimal을 사용하여 매핑 할 수 있지만 지속하기 전에 반올림해야합니다. 가장 쉬운 방법은 설정자에게 반올림 논리를 추가하는 것입니다. public void setGrandTotalAmount (BigDecimal decTest) { this.decTest = decTest.setScale (3, RoundingMode.HALF_UP)); } 또는 이중에 해당하는 값입니다. 그렇다면 십진수 형식이 일관되어야합니다. –

관련 문제