double로 선언된 변수 a를
scanf("%d", &a);
라고 쓰고 50을 입력 받았다 치고
a /= 5;
5로 나눈 다음에
printf("%d", a);
이렇게 a를 출력하면 10이 나오는데
printf("%.1f", a);
이렇게 하면 왜 0.0 으로 나오는 건가요?
double로 선언된 변수 a를
scanf("%d", &a);
라고 쓰고 50을 입력 받았다 치고
a /= 5;
5로 나눈 다음에
printf("%d", a);
이렇게 a를 출력하면 10이 나오는데
printf("%.1f", a);
이렇게 하면 왜 0.0 으로 나오는 건가요?
IEEE 764 표준에 적시된 부동소수점 표현과 정수 표현의 비트 모양이 다르기 때문.
호출된 printf 는 인자로 받은 변수 a 를 %~~f format specifier 를 통해 IEEE 764 타입이라고 간주하고 처리하게 되기 때문이지.
그러니까 (float)a 라고 전달했으면 정상적으로 나왔겠지.
어 double 이네. 미안 위에 제대로 안 읽음.
처음 입력받을때 부터 scanf( "%f", &a ); 로 했었어야함. %lf 가 필요한 경우도 있음.
그러니까 정리하면, 정수 변수를 출력할때 ( 부호가 있을 때 ) %d ( 부호가 없을 때 ) %u 로 scanf 하고 printf 해야함.
방금 내 코드에서 %f로 바꿔서 해봤는데도 0.0으로만 출력이 됨..
부동소수는 %f 로 scanf 하고 %f 로 printf 해야함. 것도 float 인 경우와 double 인 경우를 각각 %f 와 %lf 로 구별해야하는 컴파일러도 있고, 모조리 %f 로 처리하고 내부적으로 double 로 만들어 전달하는 컴파일러도 있음.
잘 읽고 똑바로 해보시오~
오 lf로 하니깐 되네 ㄳㄳ