2016-06-06 6 views
5

DecimalFormat이 하나의 숫자로 반올림되어 BigDecimal 인 경우를 분석했으며 다른 컴퓨터에서는 잘 렸습니다.DecimalFormat 결과가 다른 컴퓨터에서 서로 다른 결과가 발생했습니다

두 컴퓨터에서 모든 구성을 확인했습니다 (모두 동일하지만 가정합니다). 내가 알아 낸 차이점은 JDK 버전뿐입니다.

머신 1은 JDK1.6에서 실행됩니다. 그러나, 나는 기계 1에서 JDK1.7과 동일하게 시도했다. JDK1.6과 동일하게 작동한다.

기계 (1 개) 결과에
DecimalFormat decimalFormat = new DecimalFormat("#,###.00"); 
BigDecimal anObject = new BigDecimal("3.8880"); 
String str = decimalFormat.format(((Number)anObject).doubleValue()); 
System.out.println(str); 

은 다음과 같습니다 : 기계 2 결과에 3.39

입니다 3.38

+2

3.8880은 3.38 또는 3.39로 반올림되거나 잘릴 수 없습니다. 3.88/3.89를 의미합니까? 아니면 제대로 테스트하지 않았습니까? –

+0

명령 프롬프트 "java -version"에서 실행 해보십시오. 어쩌면 JVM 버그 일 수도 있습니다. – Aris2World

답변

6

기계 (2) 다음 JDK1.7

에서 실행하면 코드입니다

DecimalFormat에 JDK7에 도입 된 버그가있었습니다. 자세한 내용은이 질문을 참조하십시오. Is inconsistency in rounding between Java 7 and Java 8 a bug?

+0

감사합니다 Arnaud, 나는 Oracle 사이트에서도이 점을 확인했으며 거기에 같은 버그가보고되었습니다. 이 참고 자료 확인 [Oracle의 버그] (https://bugs.openjdk.java.net/browse/JDK-8039915) 사이트 –