|
전에도 어떤님께서 한번 올리셨던것과 비슷하네요...
미스테리라기 보다는 당연한 현상입니다...
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);
: 로 형변환 해도 마찬가지네요?
:
|