Kommastellen bei Float verkürzen
-
Dann ignoriere beim Einlesen doch einfach die Punkte,
wenn du die einzelnen ASCII Zeichen in eine Zahl umwandelst.Dann evtl. atoi verwenden.
Wieso hast du keine Tausender Punkte sondern nur bei Millionen?
-
Habe die Datei bekommen. Daher kann ich sie leider nicht ändern.
Wie mache ich das mit dem atoi bei einem Array?
So klappt es nicht: Datei[0].umsaetze[0]
-
Speichere dein array doch in einen string um z.B in einer for Schleife.
Dabei kannst du dann auch gleich die Punkte aussortieren und dann
halt atoi verwenden.Was du da unter klappt nicht zeigst, was soll das sein?
Das sieht nicht nach Ansi C aus.
-
Ich schreibe mal kurz um was es genau geht:
Ich habe eine Datei bekommen, aus welcher ich auslesen soll. Diese Datei beinhaltet eine Struktur, welche ich über Pointer eingebunden habe.
Aus der Datei soll ich bestimmte Berechnungen machen.Das was da nicht klappt, da wollte ich aus dem Array einen Datensatz in int wandeln.
-
Vielleicht kannst du deine Werte einfach mit 10^6 multiplizieren
um dein Problem zu lösen.
-
Klappt leider nicht. Da erhöhen sich nur die Stellen vor dem Punkt
-
Welchen Zieltyp willst du haben integer oder float? Mit float liest du die Eingaben als String, wandelst diese mit atof() in einen float um und wählst dann einfach Multiplikatoren wie Tausend oder Million - fertig. Mit integer musst du notwendig erst den ursprünglichen Punkt entfernen.
-
Also in der Binärdatei sind die Zahlen als float deklariert.
Wie mache ich das mit atof()?
-
-
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