Einlesen von Fließkommazahlen (Datenverlust)



  • Hi Leute,

    ich hab folgendes problem:
    ich lese eine datei ein die in jeder zeile eine float-zahl enthält (zB. 12.42)
    und speicher diese in einem array.
    doch wenn ich diese zahl wieder ausgebe ergibt sich zB. folgendes 12.41999

    hat jemand eine ahnung wie es dazu kommt?

    Quellcode:

    #include<stdio.h>
    void main (void)
    {
    	int i=0;
    	float Feld[200];
    	//double Feld[200];
    	FILE *datei;
    	if ( (datei = fopen("pj-20", "r")) != NULL)
    	{
    		while(fscanf(datei,"%f",&Feld[i])!= EOF)
    		{
    			printf ("%f\n", Feld[i]);
    			i++;
    		}
    		fclose (datei);
    	}else printf("Fehler beim Lesen der Datei!");
    	printf ("\n\n");
    }
    

    Datei:

    98.30
    55.88
     9.64
    83.96
    35.88
     7.64
    73.82
    54.85
    63.07
     3.98
    48.93
    50.90
    70.35
     3.23
    22.74
     6.98
    70.72
    74.80
    95.84
    60.95
    

    Ausgabe:
    http://80.190.202.79/pic/f/five/ausgabe.jpg

    -------------------------------------------------------------------

    evtl. wichtig: die datei hat keine datei endung (wie zB .txt)
    der dateiname ist pj-20
    ihr könnt sie hier runterladen falls sie von nutzen ist http://www.bwinf.de/uploads/media/pj-klein.zip



  • Das altbekannte Genauigkeitsproblem bei Gleitkommazahlen - der Computer kann Brüche nicht exakt darstellen (Stichwort "IEEE 754") und rundet sie deshalb ein wenig.



  • Du kannst bei printf() auch die Ausgabegenauigkeit angeben:

    printf("%.2f", fValue);
    


  • hmm.. schade.. da muss ich mir wohl was einfallen lassen 🙂
    nochmals Vielen Dank! 👍



  • @five: hattest du meinen Beitrag gelesen?


Log in to reply