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