2010-06-04 4 views
24

두 정수를 어떻게 나누고 C로 double 또는 float 답을 구합니까?정수 나누기에서 분수를 가져 오는 방법은 무엇입니까?

+2

"는 십진수"은 정수 또는 정수가 아닌 숫자 적용 ("진수", "진수", "진")를 표현한다. 내 말은, "비 정수 결과를 얻는다"는 뜻입니다. – leonbloy

+0

이것은 정수 나누기 printf ("% d % d/% d"x/y, x % y, y);를 사용하여 분수 (유리수)를 얻는 방법입니다. 정수가 아닌 결과를 원하지 않습니까? – Brendan

답변

41

float 또는 double으로 둘 중 하나를 캐스팅해야합니다.

물론
int x = 1; 
int y = 3; 

// Before 
x/y; // (0!) 

// After 
((double)x)/y; // (0.33333...) 
x/((double)y); // (0.33333...) 

, 당신은 double 또는 float A의 부문의을 결과를 저장 있는지 확인하십시오! 결과를 다른 int에 저장하면 아무런 효과가 없습니다. 차드의 의견 ("[tailsPerField setIntValue:tailsPer]") @에 관한


는 :

더블을 통과하거나, 등을 사용할 수를 setDoubleValue이있을 때 setIntValue에 떠하지 마십시오. 그것은 주석에서 언급 한 것과 같은 문제 일 것입니다. 여기서는 명시 적 형변환을 사용하지 않고 double이 int로 읽혀지기 때문에 잘못된 값을 얻게됩니다. 내 시스템에 예를 들어

, 파일 :

#include <stdio.h> 
int main() 
{ 
    double x = 3.14; 
    printf("%d", x); 
    return 0; 
} 

출력 : 이중 시도했기 때문에

1374389535

는 int로 읽을 수 있습니다.

+0

오른쪽. 나누기를 수행하기 전에 정수를 변환하십시오. – DOK

+0

double tp; double x; x = tn; // (tn은 int) 일반적으로 10 tp = x/fn; // fn 또한 int (일반적으로 5)이지만 여전히 0을 얻습니다. –

+0

@Chad : 코드가 올바르게 보입니다. 결과가 0이라고 어떻게 결정 했습니까? printf ("% d", tp)'와 같은 것을하고 있습니까? double의 내용을 int로 인쇄하려고하면 올바른 결과를 얻을 수 없습니다. 그렇게했다면 컴파일러에서 경고해야합니다. 두 배의 경우 형식 문자열은'% lf'입니다. –

3

유형 캐스팅을 사용하십시오. 예를 들어 ,

main() 
    { 
     float a; 
     int b=2, c= 3; 
     a=(float)b/(float)c; // This is type-casting 
     printf("%f",a); 
    }