Kommastellen bei Float verkürzen
-
-
So wie es aussieht, hast du eine Binärdatei mit vorgegebenem Aufbau bestehend aus Ziffern, Dezimalzeichen (Punkt), Trennzeichen (Komma) und vielleicht Leerzeichen (blanks) - mehr nicht. Die einzelnen Zahlen können dabei möglicherweise noch eine beliebige Länge Bytes haben. Bevor du da an eine Aufbereitung gehst mit ANSI-Funktionen wie atof() musst du wohl erst einmal byteweise die einzelnen Float-Zahlen sauber als Folge von Bytes einlesen und diese dann einzeln interpretieren. Dein Ziel ist klar, die Datengrundlage dagegen nicht, denn du hast offensichtlich noch keine reine Binärdatei mit Float-Zahlen. Es bleibt dir dann nichts weiter übrig, als mit getc() die Datei byteweise einzulesen und den notwendigen Rest nach der Logik des Dateiaufbaus selbst zu machen. Das erfordert leider eine tiefgehende Byte-Frickelei - ist aber machbar.
Wenn wir dir helfen sollen, brauchen wir eine klare Information darüber, was wie in der Binärdatei drinsteht.
-
Es ist keine Binärdatei sondern eine ASCII bzw. Textdatei.
Eine Binärdatei enthält üblicherweise keinen lesbaren Text,
da sie auch Bytes enthält die unter ASCII als Steuerzeichen
interpretiert werden.
-
Hier die Datei:
-
Also ok, Binärdatei. Durch deinen ersten Post hast du mich etwas
verwirrt.Wenn du du Werte in eine float-Variable einliest, dann kann man
die doch mit 10^6 multiplizieren, wie ich gestern schon schrieb.Warum sollten sich da nur die Stellen vor dem Punkt verändern?
Vielleicht kannst du ja auch in eine double-Variable einlesen,
da hast du mehr signifikante Ziffern.
-
So ist der Befehl mit dem multiplizieren: Europa[0].istumsaetze[0]*10E6
Aber es kommen nur folgende Zahlen raus:
Ohne --> 48.000000
Mit --> 480000000.000000
-
Das ist doch das was du willst.
Allerdings steht in deiner Datei 480.000000 und nicht 48.000000
Nur hat dieser Beispielwert im Dezimalbereich natürlich
nur Nullen. Deine Argumentation, dass nur die Vorkommazahlen
multipliziert werden stimmt also nicht.Welches Problem hast du noch, ich verstehe es nicht
-
An sich hast du Recht. Könnte die Nullen hinter dem Komma ja einfach raus nehmen. Da werde ich da erstmal so lassen und nachfragen was die Punkte für einen Sinn haben und wie sie eingesetzt werden sollen. Da ich selber nicht genau weis wie es gewünscht ist.
Danke dir natürlich sehr
-
Du musst die Nachkommastellen nicht "rausnehmen" sondern
nach der Multiplikation z. B. in eine int-Variable umspeichern.Etwa so
int intValue = 0;
float floatValue = 480000000.000000;int intValue = (int) floatValue;
Danach steht in intValue der Wert 480000000 ohne Nachkommastellen.
Evtl kommt vom Compiler ne warnung, dass beim Umwandeln von float
in int Daten (Genauigkeit) verloren geht.
-
Das werde ich auch machen. Erst multiplizieren und dann einfach in Int Casten.
Danke Danke