2016-08-10 1 views
3

JDK자바 8 DecimalFormat는, 일치 출력을

4.480 
4.481 
4.580 
4.580 

내가 JDK7 bug에 대해 알고 8

DecimalFormat x = new DecimalFormat("0.000"); 
System.out.println(x.format(4.4804)); 
System.out.println(x.format(4.4805)); 
System.out.println(x.format(4.5805)); 
System.out.println(x.format(4.5804)); 

출력을 제공합니다. 그러나 JDK 8조차도 일관성이 없습니다. 내가 뭔가 잘못하고 있는거야? 질문에 대한 코멘트에 의해 제안으로, 당신의 관찰 결과가 당신의 숫자 리터럴에 의해 발생하는

+3

인쇄에 코드 샘플을 조정할 경우에는 버그가 여기에 없다'새로운 BigDecimal를 (4.5805)로 .toString()'과'새의 BigDecimal (4.4805)로 .toString()가'볼보다 일관된 결과를 볼 것이다 이것은 연결된 질문에 설명 된 것과 똑같이 행동합니다. – Tunaki

답변

4

System.out.println(new BigDecimal(4.4805).toString()); 

4.48050000000000014921397450962103903293609619140625 
을 생산, 예를 들어 정확히 표시되지 않을 수 double 값으로 해석되고

4.481으로 반올림됩니다. 이는 의 직후 인의 중간 지점 4.4804.481 사이입니다. 당신이

DecimalFormat x = new DecimalFormat("0.000"); 
System.out.println(x.format(new BigDecimal("4.4804"))); 
System.out.println(x.format(new BigDecimal("4.4805"))); 
System.out.println(x.format(new BigDecimal("4.5805"))); 
System.out.println(x.format(new BigDecimal("4.5804")));