이 문제의 핵심은 음수이거나 소수점 이하의 자리수가 없는 경우까지 잘 고려하여 항상 잘 동작하는 코드를 만드는것이다.
int main()
{
int i;
float f;
printf("실수 입력 : ");
scanf_s("%f", &f);
i = (f - (int)f) * 100;
if (i < 0)
{
i *= -1;
}
printf("i=%d\n", i);
return 0;
}
대부분의 실수들은 정상 작동하는데 가끔 값이 이상하게 나오는 실수들이 있다.
원래라면 위에서부터 차례대로 30, 40, 70 이 나와야하는데 저런식으로 한번씩 틀리게 나온다.
코드가 틀린건 아닌것 같고 궁금해서 찾아보니
컴퓨터는 실수를 가지고 수행하는 모든 연산에는 언제나 작은 오차가 존재하고 이것은 모든 프로그래밍 언어에서 발생하는 기본적인 문제라고 한다.
씹어 먹는 C 언어 - <10. 연예인 캐스팅(?) (C 언어에서의 형 변환)>
부동 소수점 오차.
[CS] 부동 소수점 오차