2010-06-04 18 views
24

Jak podzielić dwie liczby całkowite i uzyskać odpowiedź podwójną lub zmienną w C?Jak uzyskać ułamki w liczbie całkowitej?

+2

„dziesiętną” jest reprezentacją (jako „szesnastkowym” „”, „ósemkowej binarnej”), który stosuje się do całkowitej lub numery liczbami całkowitymi. Masz na myśli, jak sądzę, "uzyskaj wynik nie będący liczbą całkowitą". – leonbloy

+0

W ten sposób uzyskuje się ułamki (liczby wymierne) z podziałem całkowitym 'printf ("% d% d /% d "x/y, x% y, y);'. Czy na pewno nie chcesz uzyskać wyniku niecałkowitego? – Brendan

Odpowiedz

41

Musisz rzucić jeden lub drugi na float lub .

int x = 1; 
int y = 3; 

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

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

Oczywiście, upewnij się, że jesteś zapisać wynik podziału w double lub float! Nie ma to żadnego znaczenia, jeśli przechowujesz wynik w innym int.


chodzi @ komentarzu Czadu ("[tailsPerField setIntValue:tailsPer]"):

Nie przechodzą podwójny lub unosić się setIntValue gdy masz setDoubleValue itd dostępny. Jest to prawdopodobnie ten sam problem, o którym wspomniałem w komentarzu, w którym nie używasz jawnej obsady, a otrzymujesz nieprawidłową wartość, ponieważ double jest czytany jako int.

Na przykład w moim systemie, plik:

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

wyjścia:

1374389535

ponieważ dwukrotnie próbowano odczytać jako int.

+0

Dobrze. Konwertuj liczby całkowite przed wykonaniem podziału. – DOK

+0

podwójne tp; podwójne x; x = tn; // (tn jest int) zwykle 10 tp = x/fn; // fn jest również int (zwykle 5), ale nadal otrzymuję 0 –

+0

@Chad: Kod wygląda dobrze. Jak ustaliłeś, że wynik wynosi zero? Czy robisz coś w stylu 'printf ("% d ", tp)'? To próbuje wydrukować zawartość podwójnego jako int, a nie uzyskasz poprawnych wyników. Twój kompilator powinien był Cię ostrzec, jeśli to zrobiłeś. Dla podwójnego ciągu formatu jest '% lf'. –

3

Użyj odlewania typu. Przykładowo

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