2011-09-27 2 views
2

가능한 중복 :
Why can't I return a double from two ints being divided변수를 사용하지 않으면 왜 1/10이 0입니까?

GCC와 C에서이 문 :

float result = 1/10; 

는 결과를 생성합니다 0

하지만 변수 a를 정의하는 경우 b를 각각 1과 10으로 설정 한 다음 : 나는 0.1

의 예상 답이 무엇을 제공받을

float result = a/b; 

?

+0

변수 'a'와'b '에는 어떤 유형이 있습니까? –

+6

당신은'float result = 1.0/10.0;을 시도해야한다. – CAbbott

+1

나는 그것이 컴파일 타임에 해결 되었기 때문에 그것이 10 진수를 지정하지 않았기 때문에 컴파일러는 정수라고 생각하기 때문이라고 생각한다. 1.0/10.0을 만들려고 시도하십시오. – rnunes

답변

11

/ 연산자를 두 개의 정수에 적용하면 정수로 나뉩니다. 따라서 1/10의 결과는 0입니다.

/ 연산자를 하나 이상의 float 변수에 적용하면 부동 소수점 나누기입니다. 결과는 0.1입니다.

예 : 변수

printf("%f\n", 1.0f/10); /* output : 0.1 (the 'f' means that 1.0 is a float, not a double)*/ 
printf("%d\n", 1/10); /* output : 0 */ 

예 :

1 10 및 정수 상수이기 때문에 발생하므로 나눗셈 정수 산술을 사용하여 수행된다
int a = 1, b = 10; 

printf("%f\n", (float)a/b); /* output : 0.1 */ 
+2

이것을 확장하려면 float result = 1/10.0이 예상 결과를 제공합니다. –

4

.

변수 ab 중 하나 이상이 float 인 경우 부동 소수점 산술을 사용하여 완료됩니다.

당신은 숫자 리터럴와 함께 할 그 float 문자, 예를 들어 중 적어도 하나 만들기 위해 표기법을 사용하려면 :

float result = 1.0f/10; 

또는 float에 그들 중 하나를 던져, 즉 일 것을 좀 더 정교한 :

float result = 1/(float)10; 
4

1과 10은 모두 정수이고, 당신은 당신이 float로서 정의하고 B A와 정의 할 때, 정수를 반환합니다. 1.0과 10.0을 사용하면 올바른 결과를 반환합니다.

0

플로트를 원한다면 다음과 같이 캐스팅하십시오.

float result = (float) a/b;

관련 문제