빌더초보 님이 쓰신 글 :
: double 형의 특성상,
:
: 0.35를 0.3499999999....
:
: 와 같이 순환 소수로 저장하게 됩니다(무한히 순환하는값은 아니지만...)
:
: http://blog.naver.com/dntkrl79/70027308520 를 참고해 보세요.
:
: 좀 복잡해서리 저도 개념만 이해하고 있습니다.
:
:
:
: 따라서 ,
:
: f1/0.05를 계산하면 6.99999... 가 되고,
: 이 상태에서 int로 형변환을 하면 6 이 되기 때문에
: 150000이 나오죠.
:
: 따라서, (int)를 삭제하고 아래와 같이 하면...
: int nk;
: double f1;
: f1 = 0.35;
: nk =(f1 / 0.05) * 25000;
:
: 답이 제대로 나올 줄 알았는데 174999 가 나오는군요...
: 역시 위와 같은 이유에서라고 생각합니다.
:
: 따라서 반올림을 해주거나,
: nk = RoundTo((f1 / 0.05) * 25000 , 0);
:
: nk 자체를 double 형으로 선언하면 원하는 답이 나오긴 하는데
:
: 좀 찝찝하죠...
:
:
: 그래서 검색을 좀 해보니...
:
: DoubleToComp 라는 함수가 있군요.
:
: int nk;
: Comp cmp;
: double f1;
: f1 = 0.35;
: DoubleToComp((f1 / 0.05) * 25000, cmp);
: nk=(int)cmp;
:
:
: Comp가 Computational을 의미한다는데...
: 명쾌하게 설명은 못하겠군요 ^-^;;
:
: 도움이 되었기를 바랍니다.
:
:
:
:
:
:
: 백꼴통 님이 쓰신 글 :
: : int nk;
: : double f1;
: :
: :
: : f1 = 0.35;
: :
: : nk = (int)(f1 / 0.05) * 25000;
: :
: :
: : 결과 nk 값이
: : 175000 이 니와야 하는데. 150000 이됩니다.
: :
: : 어떻게 해야 175000 값이 될 수 있나요..
|