2016-04-04 3 views
0

Ich habe ein Problem, das gleiche Ergebnis von mathematischen Gleichung, wenn ich eine Funktion verwenden. Hier ist mein Code.C convert Int zu double in einer Funktion

#include <stdio.h> 
int main() 
{ 
    int a=5, b=2; 
    double c; 
    c = (double) a/b; 
    printf("%f\n", c); 

    c = Divide(a); 
    printf("%f\n", c); 

    return 0; 
} 

int Divide(int value) 
{ 
    return value =(double) value/2; 
} 

Wenn ich den Code ausführen, erhalte ich:

2.500000 
2.000000 

Ich versuche 2,50000 für beide zu bekommen. Ich habe versucht, die Funktion auf

double Divide(double value) 

ohne Glück zu ändern. Ich bin neu in C und Codierung im Allgemeinen und bin fest. Danke für alle, die mir helfen können.

+0

'Rückgabewert = (double) Wert/2;' führt Floating-p aus oint division, was zu "2.5" führt, und weist den Wert dann einem "int" mit einer Kürzung zu und gibt "2" zurück. Das Entfernen des 'value =' -Teils liefert das beabsichtigte Verhalten. – owacoder

+0

Vielen Dank für die Antwort. Was du geschrieben hast, ergibt für mich Sinn. Ich war in der Lage, diese Funktion zum Arbeiten zu bekommen – jojonac

Antwort

1

Sie haben zwei Probleme: Die ersten haben mit der Funktion Rückgabetyp zu tun, und die Rückgabe einer int wird immer einen Gleitkommawert abgeschnitten.

Das zweite Problem ist, dass Sie das Ergebnis der Division nicht zurückgeben, geben Sie den Wert der Variablen value nach der Zuweisung an, und da value eine Ganzzahl ist, werden Sie den abgeschnittenen Wert zurückgeben. Löschen Sie die Zuordnung zurück: return (double) value/2;

+0

Vielen Dank für die Antwort. Ich konnte diese Funktion mit meiner Hilfe so ausführen, wie ich es wollte. – jojonac

0

Cast a wie folgt und ändern Sie den Rückgabetyp.

#include <stdio.h> 
int main() { 
    int a=5, b=2; 
    double c; 
    c = ((double) a)/b; 
    printf("%f\n", c); 

    c = Divide(a); 
    printf("%f\n", c); 

    return 0; 
} 

double Divide(int value) { 
    return value = ((double)value)/2; 
} 
+2

Casting hat eine höhere [Operator-Priorität] (http://en.cppreference.com/w/c/language/operator_precedence) als die Division, sodass die zusätzlichen Klammern keine Rolle spielen. –

1
int Divide(int value) 

Änderung

double Divide(double value) 

da Ihr Wert vom Typ integer ist, so weist es einen ganzzahligen Wert mit einem Schwimmer, der

2.0 wird
+0

Vielen Dank für Ihre Antwort. Es scheint in der Kodierung buchstäblich Millionen Wege zu geben, eine Katze zu häuten. Ich war in der Lage, die Funktion wie erwartet mit Ihrer Antwort und einigen anderen zu funktionieren. – jojonac

0

Sie dies tun können:

#include <stdio.h> 

double divide(double value) { 
    return value = value/2.0; 
} 

int main() 
{ 
    double a=5.0, c; 
    int b=2; 

    c = (double) a/b; 
    printf("%f\n", c); 

    c = divide(a); 
    printf("%f\n", c); 

    return 0; 
}