지금내가 하고 싶은건 실수를 입력받으면 전체길이를 구하는거야

요컨데

3.14를 입력받으면 .까지 세서 길이가 4라고 해주는거지

그래서 정수부는 어떻게 10으로 나누고 100으로 나누고... 이거 반복하면 구하겠는데

소수부를 구하는게 겁나 난관이야


int get_fractLen(double num){

double intpart, fractpart;

int len;


fractpart = modf(num, &intpart);


num -= intpart;


while(true){

if(fractpart < 0.001)

break;

num*=10;

fractpart = modf(num, &intpart);

cout << "num = " << num << endl;

cout << "intpart = " << intpart << endl;

cout << "fractpart = " << fractpart << endl;

}


len = get_intLen(num);

return len;

}



일단 이런식으로 해보려했는데

원래 저 조건문에 fractpart == 0넣어도 될거라 예상했는데

안되더라고;;

왜인지는 모르겟는데

3.14입력햇을때 0.14로 만들고 10곱하다보면 14가되는 순간이 오잖아?

그때 전체(num)에서 정수부(intpart) 빼주면 0이 될거라 생각했는데

아주 작은 수가 되더라고 그래서 아주작은수보다 작게되면 이라는 조건으로 0.01로 해주기는 했는데

여기까진 좋은데 거의 모든경우에 정상적으로 작동하거든?

근데 부분적으로 에러가 뜨더라고;;

위에거는 44.4를 입력했을때의 결과인데

첫루프 돌자마자 4.0되면서 탈출해야 정상인데;;

왜 fractpart가 1로 뜨는지 모르겟음;;

이게 다르게 생각만하면 정말 간단한 문제인거같은데

진심 모르겠다.

형들 도와줘 ㅠㅠ


P.S 여유가 된다면 왜 fractpart 가 0이 되지 않는지도 알려주라