지금내가 하고 싶은건 실수를 입력받으면 전체길이를 구하는거야
요컨데
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이 되지 않는지도 알려주라
소수점 아래자리수는 일단 소수점 위는 다 버린다음, 소수점 아래가 없을때까지 *10 하는 수를 확인하면 되지 않을까.
숲속의 참치// 위에서 한게 그렇게 한건데 안되서 고민중이엇음 ㅠㅠ
처음에 정수부분을 빼주는걸 주석처리하니깐 정상작동하긴하는데 왜 정수부분 뺀다고 이런 에러가 발생하는지 잘 모르겠다.
아는형 있으면 좀 알려줘 ㅠㅠ
근데 왜 이렇게 함? 길이 구하는 거면 string으로 변환해서 length 구하면 되자나
그렇게하면 뭔가지는거같잖아 는 개뿔 예상치못햇네