본문 바로가기

프로그래밍 공부/java

[Java] 이것이 자바다 3장 확인 문제 6 : 출력 오류 수정하기

반응형

Q6. 다음 코드를 실행하면 출력 결과로 "10%입니다."를 기대했는데 "10%가 아닙니다."가 출력되었습니다. 어디에서 잘못 작성된 것일까요?

위 문제를 출력해보면 var2==0.1 이니까(10f/100 때문에) 당연히  true = 10%입니다가 나올거라고 생각이 되는데 출력해보면 그렇지 않은 것을 볼 수 있다.

이것은 float double 타입은 과학과 공학 계산용으로 설계되었으며, 이진 부동소수점 연산에 주로 쓰인다. 이때, 넓은 범위의 수를 빠르게 정밀한 근사치로 계산하도록 설계되어있기 때문에 정확한 결과를 내기는 어렵기 때문이다.

 

그럼 이걸 어떻게 풀어야할까?

 

이건 여러가지의 방법이 있겠지만 간단한 두가지의 방법으로 해보려고 한다.

 

1. double형으로 형 변환하기.

간단하게 float을 double로 형 변환 해주는 방법이 있다.
 물론 double도 오차가 발생하지만 float 타입의 0.1f보다는 적은 오차로 저장되기 때문에 이 식에서 성립이 가능하다.

 

2. 0.1이 float 형이라는 것을 표시해주기.

0.1에 float형이라고 f를 붙여 표시해주면 조금 더 정확한 값으로 계산하여 "10%입니다."가 출력되는 것을 볼 수 있다.

반응형