Oracle 데이터베이스에서 숫자 값을 검색하고 웹 페이지에 표시하는 JSP 웹 응용 프로그램을 실행 중입니다. 수동으로 2929.2의 값을 입력하고 수동으로 데이터베이스에 쿼리하면 해당 값으로 저장되었음을 확인합니다. 하지만 JSP를 통해 검색하면 2929.199951172로 표시됩니다. 어떻게 해결할 수 있습니까? 내가 ResultSets 및 getDouble() 메서드를 사용하고 있습니다. 오라클에 float로 저장되어 있지만, Java double만큼 정밀도가 높다는 내 이해에서 getFloat()는 내가 찾고있는 것이 아닙니다.Oracle 데이터베이스에서 float을 가져올 때 자바 정밀도 문제가 올바르게 반올림되지 않습니다.
BigDecimal에 대한 기사는 다 읽었지만 필자가 필요로하지 않는 한 모든 것을 바꾸는 것을 주저합니다.
글쎄, BigDecimal은 그 목적이 있기 때문에 필요합니다 : 부동 소수점 값에 대한 정확한 정밀도로 데이터베이스의 필드를 처리합니다. –
[BigDecimal] (http://docs.oracle.com/javase/7/docs/api/java/math/BigDecimal.html)을 사용하고 [각 컴퓨터 과학자가 부동 소수점 연산에 대해 알아야 할 사항] (http://docs.oracle.com/cd/E19957-01/806-3568/ncg_goldberg.html) (그 내용을 따르지 못할 경우 최소한 [ieee-754 rounding rules] (http : // en.wikipedia.org/wiki/IEEE_floating_point#Rounding_rules)). –
@LuiggiMendoza : getBigDecimal()을 사용할 수 있지만 double로 캐스트하거나 같은 문제가 발생합니까? 나는 내가하고있는 프로그램을 철저히 조사하지 않고 복식을 저장하는 마지막 방법을 바꿀 수 없다. 그리고이 시점에서 나의 상사는 아마 우리 (내부) 고객에게 그것을 말하는 것보다는 그것을 말할 것입니다. –