오늘도 개념적인 내용이 아닌 예제프로그램을 작성해보도록 하겠습니다.. 이후로는 꼭 필요한 경우가 아니면 개념이나 이론적인 것 보다는 예제를 통해 내용을 알아보는 방식으로 공부하겠습니다. 제가 자바스터디를 하고 있는데 이론적인 내용이 계속되니까 힘들어하더군요. 그래서 예제를 중심으로 하나씩 프로그램을 작성하는 방식으로 했더니 뭔가 만들어낸다는 희열감과 성취감을 느끼더군요. 그래서 알맞은 프로그램 예제를 연구하고 작성해서 이론을 설명해보도록 하겠습니다. 오늘은 그냥 단순한 프로그램 예제입니다. 제가 예전에 캐나다에 있을 때 마트에서 페니를 없애는 작업을 했습니다. 처음에는 프로그램으로 적용되지 않아서 그냥 캐쉬어들이 생각을 해서 했습니다. 끝이 1이나 2로 끝나면 0으로 하고 3이나 4로 끝나면 5로 만듭니다. 6이나 7이면 5로 하고 8이나 9면 10으로 하도록 했습니다. 이렇게 하면 페니를 사용할 필요가 없습니다. 캐나다에서 페니는 한국으로 치면 10원입니다. 만들수록 손해나는 동전입니다. 그래서 캐나다는 그걸 없애도록 한 것입니다. 우리나라도 사실 10원짜리는 없애는 것이 맞다고 개인적으로는 생각을 합니다. 이 프로그램은 금액을 달러로 입력받고 페니를 없애도록 하는 것입니다. 예를 들어, $10.03이면 $10.05가 되는 것이고 $10.02이면 $10.00이 되는 것입니다.
위의 프로그램은 임의의 금액을 입력받고 페니를 없애주는 프로그램입니다. 위에서는 36.87을 받아서 36.85로 값을 변경하여 출력하였습니다. PennyConvert 클래스의 convert메소드에서 double 타입인 money를 String으로 바꾸고 String의 API인 charAt메소드를 사용해서 마지막 문자를 얻었습니다. 그것을 switch문으로 비교해서 money값을 변경했습니다. 사실 처음에는 double형인 money에 100을 곱한 뒤에 10으로 나눈 나머지를 가지고 프로그램을 작성했었습니다. 로직상으로는 문제가 전혀 없었는데 double형에서 문제가 생기더군요. double 형은 부동소수점 형태로 값을 저장하기 때문에 사람이 생각하는 것과는 조금 다르게 돌아갈 때가 있습니다. 실제로 double형을 이용해서 프로그램을 하고 결과를 보도록 하겠습니다.
위의 프로그램과 로직은 같기때문에 String이 아닌 double을 사용하는 로직만 캡쳐했습니다. 그렇게 해서 똑같은 36.87을 입력하면 36.86이라는 값이 출력이 됩니다. 이는 저희가 상상하던 값이 아닙니다. 사람이 생각하는 것을 따라가면 36.87에 100을 곱하면 3687이 되고 여기서 10의 나머지 값은 7이 됩니다. 그러면 switch문에 의해 money에서 0.02로 빼게되고 그러면 36.85가 나옵니다. 하지만 결과는 위에서 보시다시피 36.86이 나옵니다. 과연 어떻게 된 것일까요? 한번 100을 곱한 값을 출력해보도록 하겠습니다. 출력을 하면 3686.9999999999995이 나옵니다. 이것을 정수로 바꾸면 3686이 되고 나머지는 6이 나옵니다. 그럼 switch문에 의해 36.87에서 0.01을 빼게되어 36.86이라는 값이 나오게 됩니다. 어떤 계산을 할때는 double 형을 사용하는 것이 맞습니다. 하지만 지금과 같이 단순히 double형의 연산이 아니라면 오류가 날 수 있다는 것을 알아두시면 좋을 것 같습니다. 여러분은 10원을 없애는 프로그램도 작성해보시기 바랍니다. 우리나라 돈은 소수점이 없기때문에 오히려 쉽게 프로그램을 작성하실 수 있을 것입니다.
'프로그래밍 > Java 프로그래밍' 카테고리의 다른 글
자바의 스택(stack) (0) | 2020.08.30 |
---|---|
자바의 Linked list (0) | 2020.08.27 |
재귀호출 - 알고리즘 (0) | 2020.07.27 |
자바 프로그램 예제 - 로또 프로그램 (0) | 2020.07.24 |
자바의 상속 (0) | 2020.07.15 |