2011-11-08 1 views
0

나는 성명서를 준비했다. 전화 :준비된 문으로 setBigDecimal에 문제가 있습니까?

stmt.setBigDecimal(BigDecimal.valueOf("0.9")) 

문제는 0.90000000000000000000이 0.9 대신 저장된다는 것입니다.

Microsoft SQL Server JDBC 드라이버 3.0을 사용합니다.

BigDecimal은 드라이버가 이해하지 못하거나 드라이버를 잘못 만들었습니까?

+0

해당 열의 전체 정의는 무엇입니까? –

+0

십진수 (36, 20) – Zardo

답변

2

데이터 유형이 DECIMAL (36,20)임을 나타내므로 전적으로 논리적입니다. 36,20은 36 자리의 정밀도이며 소수점 이하 20자를 나타냅니다.

DECIMAL (36,20)에 0.9를 저장하면 필드의 지정된 정밀도이므로 0.90000000000000000000 (소수점 이하 20 자리 뒤에 있음)이됩니다.

+0

thx 예, 논리적으로 맞습니다. 하지만 나는 그렇게 똑똑하지 않다는 것을 안다. 나는 데이터베이스에서 값을 읽는 것보다 소수점 이하 20 자리를 사용하여 모든 계산이 이루어진다는 것을 의미한다 ... – Zardo

+0

그것이 원하는 것이 아니라면, 데이터베이스의 DECIMAL 데이터 유형을 선택하거나 선택한 필드를 더 작은 소수의 DECIMAL 유형으로 변환하십시오. –

1

열의 정밀도가 원인 일 수 있습니다. 그것은 특정 정밀도 또는 스케일없이 숫자로 선언 된 것 같습니다.

+0

십진수 (36, 20)로 선언되었습니다. – Zardo