Kommastellen bei Float verkürzen



  • 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()?



  • Seppe123 schrieb:

    Wie mache ich das mit atof()?

    http://igtfy.com/?q=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:

    Europa.DAT



  • 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


Anmelden zum Antworten