2010-06-04 15 views
24

İki tam sayıyı nasıl böler ve C'ye çift veya yüzdürme yanıtı verirsiniz?Tamsayı bölümlerinde kesirler nasıl alınır?

+2

"ondalık" tamsayı ya da olmayan tam sayılardır için de geçerlidir ("onaltılık", "sekizlik", "ikili" gibi) bir temsilidir. Yani, "tamsayı olmayan bir sonuç al" demek istedim. – leonbloy

+0

Tamsayı bölmeli printf ("% d% d /% d" x/y, x% y, y) ile fraksiyonları (rasyonel sayılar) nasıl elde edersiniz. Tam sayı olmayan bir sonuç istemediğinizden emin misiniz? – Brendan

cevap

41

Birini veya diğerini float veya double'a dökmeniz gerekir.

Elbette
int x = 1; 
int y = 3; 

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

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

, sen double veya float bir bölünmeye nedensonucunu saklamak olduğundan emin olun! Sonucu başka bir int'da saklarsanız, iyi olmaz. Çad'ın comment ("[tailsPerField setIntValue:tailsPer]") @ İlişkin


:

çift iletebilir veya vb kullanılabilir setDoubleValue varken setIntValue için yüzer vermeyin. Muhtemelen yorumda bahsettiğim, açık bir yayınlama kullanılmadığınız ve geçersiz bir değere sahip olduğunuz söz konusu olan aynı sorun, çünkü bir çift bir int olarak okunduğundan. sistemimde Örneğin

, dosya:

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

çıkışları: çift çalışıldı çünkü

1374389535

int olarak okunacak.

+0

Sağ. Bölümü gerçekleştirmeden önce tam sayıları dönüştürün. – DOK

+0

çift tp; çift x; x = tn; // (tn bir int) normal olarak 10 tp = x/fn; // fn aynı zamanda bir int (normalde 5) ama hala 0 –

+0

@Chad olsun: Kod doğru görünüyor. Sonuçların sıfır olduğunu nasıl belirlediniz? Printf ("% d", tp) 'gibi bir şey mi yapıyorsunuz? Bu, bir çiftin içeriğini bir int olarak yazdırmaya çalışır ve doğru sonuçları alamazsınız. Bunu yaparsan derleyicin seni uyarmış olmalı. Bir çift için format dizgesi '% lf' dir. –

3

Yazım tipini kullanın. Örneğin ,

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