2014-11-24 3 views
-1

안녕하세요 저는 Java 프로그래밍에 익숙하지 않고 복식에 문제가 있습니다. 나는 4.6에서 .2를 빼는 대신 4.4를받는 대신 4.3999999999999995를 얻습니다. 십진수는 정확하게 바이너리로 표현 될 수는 없지만이 문제를 해결하는 방법은 무엇인지 알고 있습니다. 어떤 조언을 주시면 감사하겠습니다.Java double rounding

+3

'double' 대신'BigDecimal' 클래스를 사용하는 법을 배웁니다. –

+2

또는'DecimalFormat'을 사용하여 출력을 나타내거나 printf()를 사용하십시오. – EJP

+0

빠른 수정을 위해서는'flood' 대신'System.out.println (4.6F - 0.2F);'를 사용하십시오. 더 나은 선택이기 때문에'BigDecimal'에 익숙해 져야합니다. – Tom

답변

1

double 대신 BigDecimal 클래스를 사용하면이 부정확성을 얻을 수 없습니다. BigDecimal을 만들 때이 값을 String으로 전달하는 것이 가장 좋습니다. 따라서 아무런 반올림도 없습니다.

BigDecimal first = new BigDecimal("4.6"); 
BigDecimal second = new BigDecimal("0.2"); 
System.out.println(first.subtract(second)); 
1

당신은 BigDecimal 사용할 수 있습니다 또는

System.out.printf("%.2f%n", 4.6 - 0.2); 

출력과 같은 형식의 출력을 사용할 수있는 것은 사용

4.40 

또는이다 BigDecimal

BigDecimal bd = BigDecimal.valueOf(4.6); 
System.out.println(bd.subtract(BigDecimal.valueOf(0.2))); 

출력이

입니다3210
4.4