|
불사새 님이 쓰신 글 :
: 전에도 어떤님께서 한번 올리셨던것과 비슷하네요...
:
: 미스테리라기 보다는 당연한 현상입니다...
:
: 2진수로 수를 표현하다보니 10진수에서의 표현과는 많이 다르지요.
:
: 10진수를 2진수로 표현시 정수부분은 별 탈없이(?)표현됩니다.
:
: 다만 소숫점이하가 문제지요..
:
: 예를 들어 우리는 1.5(10진수)라고 하는 표현이...2진수로 표현하게 되면 1.1(2진수)입니다.
:
: 2진수에서 각 자릿수는 다음처럼 됩니다.
:
: 1 0 1 0 0 . 0 1 1 0 0 1.. (2진수)
: 16 8 4 2 1 .0.5 0.25 0.125 0.0625 0.3125 0.015625...
:
: 16*1+4*1+0.25*1+0.125*1+0.015625*1.. = 20.39625.. (10진수)
: 이런식이겟지요 위는 2진수 아래는 10진수로..
:
: 그렇다면 20.4의 표현은 2진수로 정확이 얼마...라고 떨어지지 못합니다.
:
: 이미 10진수는 2진수로 변환되어 저장된 이상 2진수로서 소숫점은 깨집니다.
:
: 즉 20.4는 20.39625..하고 한참을 나아가는데 보통 자릿수 표현제한이 있으니깐 어느정도에서
:
: 자릿수를 끊고 반올림을 하겟찌요..
:
: 즉 님께서 입력하신 20.4는 20.39625로 저장되고 당연히 그대로 출력하면 20.4로 출력되지만
:
: 10을 곱하면 203.9625로 되고 그걸 int로 캐스틍하니깐 소숫점은 날라가고 정수부분인 203만 남지요..
:
:
:
: 아담 님이 쓰신 글 :
: : int m_SetPower;
: : double i_power;
: :
: : i_power = StrToFloat(SetAvgPower->Text);
: : m_SetPower = ( i_power*10.0);
: :
: :
: : 이렇게 코딩했더니.
: : SetAvgPower->Text가 20.4 일때에
: : m_SetPower 가 203이 되네요?
: : 20.5 는 205가 맞는데
: : 20.3도 203 맞고
: : 20.2는 201이 된다는 미스테리한현상이.....
: :
: : (int) ( i_power*10.0);
: : 로 형변환 해도 마찬가지네요?
: :
저도 이전에 이런 문제가 있어 질문을 올린적이 있는데요.
여기 자료실에서 찾아보면 (StrToFloat로 검색)하면 해답이 있을거예요.
|