mit fstream variablen einlesen ist sehr ungenau!



  • Ja tach auch,

    habe folgendes Problem. Habe hier eine Textdatei dessen Werte ich einlese.

    Die Datei sieht so aus:

    1400.119997  487.539001 -25.978100 1 0.0000
     1399.089998  480.804004 -25.975600 1 0.0000
     1394.600000  478.224006 -25.988600 1 0.0000
     1389.050002  480.490005 -25.990700 1 0.0000
     1386.490004  484.008003 -25.989500 1 0.0000
     1387.610003  488.090001 -25.988700 1 0.0000
     1389.970004  491.496999 -25.995300 1 0.0000
     1395.889998  492.365998 -25.990000 1 0.0000
    

    So da habe ich mir eine eigene Struktur geschrieben die so hier aussieht:

    struct vektor
    {
    	double x;  
    	double y;  
    	double z; 
    	double rol; 
    	double pit; 
    };
    

    und lasse die Daten mittels

    datei.open(input, ios::in);
    while (!datei.eof())
    {
    	datei >> daten[i].x >> daten[i].y >> daten[i].z >> daten[i].rol >> daten[i].pit;
    	i++;
    }
    datei.close();
    

    einlesen.

    Klappt auch super nur rundet er mir die eingelesenen Werte auf folgendes Format ab:

    1400.12  487.539  -25.9781  1  0
    1399.09  480.804  -25.9756  1  0
    1394.6  478.224  -25.9886  1  0
    1389.05  480.49  -25.9907  1  0
    1386.49  484.008  -25.9895  1  0
    1387.61  488.09  -25.9887  1  0
    1389.97  491.497  -25.9953  1  0
    1395.89  492.366  -25.99  1  0
    

    Muss ich das jetzt verstehen? Warum geht das nicht genauer, schliesslich sind ja alles schon double-Werte. Also da müsste doch noch was zu machen sein.

    Nur weiß ich nicht wie? Könnt' ihr mir da vielleicht weiterhelfen!

    Ciao 😉



  • Schau dir mal die Format-Flags und Manipulatoren der iostreams an (insbesondere setprecision() und fixed).

    /edit: Vielleicht noch ein eigenes Wort zu setprecision():
    Mit setprecision(n) legst du die Genauigkeit fest, mit fixed erzwingst du die Ausgabe als Festpunktzahl.

    const long double x = 3.000000009;
    cout << fixed << setprecision(9) << x << endl;
    

    Caipi



  • chickenwing schrieb:

    Muss ich das jetzt verstehen?

    ja.

    Warum geht das nicht genauer

    ist doch genau genug.

    schliesslich sind ja alles schon double-Werte.

    und ich bin der meinung, daß double gnau genug ist.

    Also da müsste doch noch was zu machen sein.

    ich sehe das problem nicht.

    Nur weiß ich nicht wie? Könnt' ihr mir da vielleicht weiterhelfen!

    zeig mir das problem mal genauer, indem du die zahlen mit viel mehr stellen ausgibst. mit setprecision geht das glaub ich. keine ahnung, ich gebe nie genau aus.



  • Ja das Problem war dass ich ne Zahl mit 6 Kommastellen einlese und er mir nur 2 Kommastellen ausgibt. Dachte es läge am einlesen aber durch die Befehle setprecision und fixed funktionierts nun wunderbar.

    Fettes Mercy


Anmelden zum Antworten