C++Builder Programming Forum
C++Builder  |  Delphi  |  FireMonkey  |  C/C++  |  Free Pascal  |  Firebird
볼랜드포럼 BorlandForum
 경고! 게시물 작성자의 사전 허락없는 메일주소 추출행위 절대 금지
C++빌더 포럼
Q & A
FAQ
팁&트릭
강좌/문서
자료실
컴포넌트/라이브러리
메신저 프로젝트
볼랜드포럼 홈
헤드라인 뉴스
IT 뉴스
공지사항
자유게시판
해피 브레이크
공동 프로젝트
구인/구직
회원 장터
건의사항
운영진 게시판
회원 메뉴
북마크
볼랜드포럼 광고 모집

C++빌더 Q&A
C++Builder Programming Q&A
[71524] Re:소숫점나누기 할때요..
빌더초보 [] 3615 읽음    2014-07-07 21:46
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 값이 될 수 있나요..

+ -

관련 글 리스트
71520 소숫점나누기 할때요.. 백꼴통 3059 2014/07/07
71524     Re:소숫점나누기 할때요.. 빌더초보 3615 2014/07/07
71525         감사합니다. ^^ 백꼴통 3239 2014/07/08
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.