은 나를 왜, 어떻게이 문제를 해결하려면 1610612736C에서 정수로 float을 곱하는 방법은 무엇입니까? 이 코드를 실행하면
void main(){
float a=3.3f;
int b=2;
printf("%d",a*b);
}
에게 반환?
편집 : 플로트 (b)에 의해 그 동일한 바보 결과를
은 나를 왜, 어떻게이 문제를 해결하려면 1610612736C에서 정수로 float을 곱하는 방법은 무엇입니까? 이 코드를 실행하면
void main(){
float a=3.3f;
int b=2;
printf("%d",a*b);
}
에게 반환?
편집 : 플로트 (b)에 의해 그 동일한 바보 결과를
float
과의 승산의 결과를 반환 2.0f = 난 INT B = 2 바꿀 경우는, 정수 및 부동 소수점의 경우에도 문제가 아니다 int
은 float
입니다. 그 외에도 printf
으로 전달하면 double
으로 승급됩니다. %a
, %e
, %f
또는 %g
형식이 필요합니다. %d
형식은 int
형식을 인쇄하는 데 사용됩니다.
편집 참고 : main
의 반환 값은 int
이어야합니다. 여기에 고정 된 프로그램입니다 :
#include <stdio.h>
int main(void)
{
float a = 3.3f;
int b = 2;
printf("%a\n", a * b);
printf("%e\n", a * b);
printf("%f\n", a * b);
printf("%g\n", a * b);
return 0;
}
및 출력 :
$ ./example
0x1.a66666p+2
6.600000e+00
6.600000
6.6
또는, 당신은 또한
printf("%d\n", (int)(a*b));
할 수 있으며, 이것은 당신이 (종류의) 기대하고있는 결과를 인쇄 할 것이다 .
항상 형식 문자열과 일치하도록 변수를 명시 적으로 유형 변환해야합니다. 그렇지 않으면 이상한 값이 인쇄되는 것을 볼 수 있습니다.
정수 및 부동 소수점 문제입니다. 제 대답을 참조하십시오. –
@ Carl이 맞습니다. 곱셈 자체가 float/int 문제가 아니지만 _definitely_는 문자열 형식입니다. – paxdiablo
함수'printf'는'int printf (const char * format, ...)'와 같은 * varargs * 메소드입니다. 즉, 첫 번째 인수 이후에 임의의 인수가 필요하며 컴파일 할 때이를 확인할 수 없거나 * 형식 문자열 *에서 가져온 원하는 형식으로 캐스트 할 수 없습니다. 형식 문자열은'% d '을 말하고,'int'를 찾습니다. 표현식'a * b'는'float'이며'double'으로 변환됩니다. 이 타입들은 같은 메모리 크기조차 갖지 않기 때문에, 임시'double'은 물리적으로 반으로 잘라지고'int'로 취급됩니다. 이것은 솔로몬 솔루션이 아닙니다. –