2017-11-11 6 views
-1

C-Sprache, stdio.h Bibliothekkann nicht Correct Durchschnittliche

Beispielcode ermitteln:

float avg; 
avg = 3/2; 
printf("Average: %.2f", avg); 

Aus dem obigen Code ich die folgende Ausgabe erwarten:

Average = 1.50 

Aber statt Ich bekomme:

Average = 1.00 

Warum ist das? Und wie bekomme ich die richtige Ausgabe?

+0

Am besten zu _not_ bearbeiten Sie die Antwort in die Frage. Stattdessen posten Sie Ihre eigene Antwort, falls gewünscht. Überprüfen Sie [Was soll ich tun, wenn jemand meine Frage beantwortet?] (Https://stackoverflow.com/help/someone-answers) – chux

Antwort

0
#include <stdio.h> 

int main(void) { 
float avg; 
avg = (float) 3/2; 
printf("Average: %.2f", avg); 

    return 0; 
} 
+0

3/2 ist eine Ganzzahl Division und das ist, warum die Antwort kommt 1.00, konvertieren 3 in float und dann führe die Division durch, es wird das korrekte Ergebnis geben – anupam691997

+0

Dieser Kommentar würde am besten in der Antwort bearbeitet werden. – chux

0

Sie sollten es so verwenden .. avg=3.0/2.0 ansonsten wird es ganzzahlige Division. Es ist sonst auf 1 abgeschnitten. (Integer-Division schneidet ab, so dass jeder Bruchteil, hier .5, verworfen wird).

Ein Dezimalpunkt in einer Konstante gibt an, dass es sich um Gleitkomma handelt. Das Ergebnis wird also nicht abgeschnitten.

Von Standard: - §6.5.5.5

Wenn ganzen Zahlen unterteilt sind, das Ergebnis des/Operators ist die algebraischen Quotienten mit jedem Bruchteil verworfen.

1

3 und 2 ganze Zahlen sind, so dass die sich ergebende Ganzzahl d 1 wird dann nach der Teilung zu schweben gegossen, und es werden 1,00 haben. man muss sie schwimmt machen, dies tun:

avg = 3.0/2.0; 
0

avg = 3/2; // gibt es insgesamt 3 Betreiber, darunter = niedrigste Priorität So werden wir endlich zuordnen. Jetzt, wenn Sie 3/2 tun, sind beide Operanden Integer-Konstante, so dass das Ergebnis dieser Operation nur Integer ist. In C 3/2 ergibt 1 nicht 1.5, da das Ergebnis vom Integer-Typ ist, nicht vom Floating-Typ.

Sie wollen erwartete Ausgabe machen entweder Operanden als schwebender Typ wie unten.

avg = (float)3/2 ; 
0

Sie führen dort eine ganzzahlige Division durch. Also wird der gebrochene Teil verworfen.

Dies wird durchführen Punkt Division floating Versuchen

float avg; 
avg = 3.0/2; 
printf("Average: %.2f", avg); 

entweder durch den Zähler oder Nenner vom Typ float es zu halten.