kleines Problem mit: Konvertierung von 'int' in 'float', moeglicher Datenverlust

dika

Grünschnabel
Hallo,

habe volgendes Problem:

Der Compiler gibt eine Warnung aus , und das Programm arbeitet nicht richtig...
Warnmeldung: "warning C4244: '=' : Konvertierung von 'int' in 'float', moeglicher Datenverlust".

Obwohl ich die Varible "anteil" alsTyp float deklariert habe rechnet es die Nachkommastellen nicht aus, z.B. bei 16.67% stehen da nur 16.00 % an.

warum? :rolleyes:

Code:
 #include <stdio.h>
#include <string.h>
#include <conio.h>
 
 
main()
{
 
char text[50];
int gesamtanzahl, e_anzahl=0, i; 
float anteil;
 
 
printf("geben sie den text ein: ");
gets(text);
 
gesamtanzahl = strlen(text);
 
for(i = 0; i <= 50 ; i++)
{
if( text[i] == 'e')
{
e_anzahl ++;
}
}
 
printf("In diesem Text sind %3i 'e' Zeichen enthalten", e_anzahl);
anteil = e_anzahl *100 /gesamtanzahl;
printf("\n\nDer prozentuale Anteil betraegt %6.2f %%", anteil);
 
getch();
return(0);
}
 
Hallo,

Code:
anteil = e_anzahl *100 /gesamtanzahl;

anteil ist zwar ein float aber auf der Rechten Seite wird trotzdem eine Integer
Division durchgeführt, und danach das Ergebnis( mit bgeschnittener Kommastelle
auf deine flaot Var zugewiesen...
Um das zu umgehen musst du mindestens ein Parameter des / Operanten
zu einem Float kasten, der zweite wird dann implizit in einen Float gecastet
und das Ergebniss ist eine ganz normale Division:

Code:
anteil = e_anzahl *100 /static_cast<float>(gesamtanzahl);

oder:

Code:
anteil = e_anzahl *100.0 /gesamtanzahl;
sollte auch gehen

Gruß

RedWing
 
@ Radwing

Danke! habe das mit casts gewusst, dachte nur es muss auch so gehen(denkefehler).

@umbrasaxum

wie meinst du das denn jetzt?

wenn die variblen : (gesamtanzahl, e_anzahl=0, anteil )
alle den typ float haben würden, müsste es doch gehen.....?
 
Zurück