#다이어트 실패 ## CODE ``` public class Main { public static void main (String[] args) { double weight = 72.4; int n = Integer.parseInt(args[0]); for (int i = 0; i <= n; ++i, weight += 0.2) { System.out.println(i+"개월 후 몸무게"+weight);} } } ``` ## INPUT ``` 5 ``` ## OUPUT ``` 0개월 후 몸무게72.4 1개월 후 몸무게72.60000000000001 2개월 후 몸무게72.80000000000001 3개월 후 몸무게73.00000000000001 4개월 후 몸무게73.20000000000002 5개월 후 몸무게73.40000000000002 ``` 혹시 왜 값이 0000000001 00000000002 이렇게 붙는지 알수있을까요???
## 답변 **double 타입**은 정확히 떨어지는 수가 아닙니다. 따라서 소수점 이하의 정확도에 ***`오차`**가 생길 수 있습니다.* ``` double weight = 72.4; weight += 0.2; System.out.println(weight); // 72.60000000000001 ``` ## 해결 `printf()` 메소드를 사용하여 소수점 이하 자리수를 제한해보세요. ``` // 소수점 이하 둘째 자리까지 출력 System.out.printf("%.2f\n", weight); // 72.60 ``` ## 참고자료 --- 1. float와 double의 부정확성 - https://gwpark.tistory.com/1729
감사합니다