- LiTime Speicher und Akkus         
Ergebnis 1 bis 9 von 9

Thema: Double to String?

  1. #1
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    18.05.2006
    Alter
    36
    Beiträge
    150

    Double to String?

    Anzeige

    LiFePo4 Akku selber bauen - Video
    Hallo!

    Ich brauche eine Funktion in C, die mir eine Zahl vom Typ double in einen String umwandelt.
    Gibts sowas, bzw. wie mache ich sowas?
    Oder wie gehts eben?

    lg,

  2. #2
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    06.02.2005
    Ort
    Hamburg
    Alter
    37
    Beiträge
    4.255
    AVR-GCC?
    dtostrf() aus <stdlib.h>
    Alles weitere findest du in der avr-libc-Doku.

  3. #3
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    18.05.2006
    Alter
    36
    Beiträge
    150
    Ne, verwende die MCC18 von Microchip!

    Da ist kein dtostrf() in der Standard lib. Blöd!

    Aber gibts nicht irgendwo den Quellcode dazu? Dann pack ich die funktion halt in mein Programm so dazu.

    lg,

  4. #4
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    18.05.2006
    Alter
    36
    Beiträge
    150
    Oh, blöd!!

    Tschuldigts!! Ich bin im falschen Unterforum!
    War nicht meine Absicht!

    Sorry!!

  5. #5
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    25.10.2007
    Ort
    41462 Neuss
    Alter
    55
    Beiträge
    375
    nen double per hand in nen string umzuwandeln ist sehr aufwendig und kompliziert. such besser weiter nach ner bibliothek die ne entsprechende konvertierungsroutine beinhaltet.

    wenn du wirklich den quellcode für so ne umwandlung analysieren willst, dann schau doch mal bei den gnu c bibliotheken. für die gibts den quellcode im web. aber den betreffenden quellcodeteil dann zu finden ist auch schon ne kleine herausforderung

    ansonsten findest du in wikipedia den genauen aufbau einer fließkommazahl (wobei zu klären wäre, ob in deiner softwareumgebung das übliche ieee format verwendet wird, oder ein gänzlich anderes format, denn man kann ne fließkommazahl auf sehr viele verschiedene arten binär codieren) und kannst dir daraus (mit entsprechenden mathematik- und programmierkenntnissen) ne eigene konvertierungsroutine basteln (viel spass dabei!).

  6. #6
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    18.05.2006
    Alter
    36
    Beiträge
    150
    Tja, also da hast du sicher Recht, das das aufwendig ist.
    Also dacht ich ich versuchs anders.
    Hab in den standard io functions nachgesehen und was findet man da. Das tolle sprintf();
    Also hab mich mal gefreut. Ich schreibe einfach die Zahl in einen string und den kann ich wunderbar auf meinem LCD ausgeben.
    Nur leider gibts ein Problem: Ich finde keinen passenden Platzhalter für ein Double und auch nicht für ein Float. Es gibt zig für int (ich kanns binär, oktal, hex, ... ausgeben, hab was für char, für string, für pointer, sogar für die Speichergröße), bei dem alles so klappt wie es soll, aber nix für float oder double.
    Kennt sich da wer aus, bzw. hat damit schon gearbeitet?
    Bitte!!!!

    Edit: Also nicht das ihr glaubt ich habs nicht ausprobiert. Hab e, E, f, F, lf, G, g ausprobiert aber es geht nicht. Das macht mich jetzt schon ärgerlich, weil das sonst überall geht. Hab in AVR nachgesehen. Da gehts. Das ist echt ärgerlich.

  7. #7
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    25.10.2007
    Ort
    41462 Neuss
    Alter
    55
    Beiträge
    375
    naja, vermutlich unterstützt deine bibliothek eben keine floats/double. wenn es mit sprintf geklappt hätte, dann gäbe es vermutlich auch ein dtostrf in deiner bibliothek

    ich hab mal in java ne routine geschrieben, die ein hp fließkommaformat manuell in das java format umgewandelt hat. aber das ist natürlich viel einfacher, als die umwandlung in nen string.

    wenn du irgendwie gar keine lösung findest, und es wirklich wirklich wichtig ist, dann mach ich mir mal die (vermutlich nicht unerheblche) arbeit und helfe dir beim schreiben einer eigenen umwandlungsroutine (wobei ich für nix garantiere).
    schick mir dann mal ne normale email (siehe deine pn)

  8. #8
    Erfahrener Benutzer Fleißiges Mitglied
    Registriert seit
    18.05.2006
    Alter
    36
    Beiträge
    150
    Na ja, es ist wirklich wichtig, aber ich hab inzwischen eine, na ja, recht annehmbare Lösung gefunden.
    Ich hab ja erwähnt, dass es mit int bei der function sprintf() funktioniert. Da hab ich ganz einfach zuerst alle Nachkommastellen abgeschnitten. Das vorm Komma in einen String geschrieben. Dann einen Dot und dann hab ich ganz einfach mit 10^<genauigkeit> die double Zahl mutlipliziert. Mir die Nachkommas rausgefischt und mit denen wieder ne Ganze Zahl. Das hab ich dann wieder an den vorherigen String rangehängt. Also ist wahrscheinlich nicht die feine Programmierer-Art, aber es funktioniert.

    Trotzdem danke für deine Hilfe. Das ist echt ein tolles Angebot. Bekommt man nur selten. Respekt!!

    lg,
    Norbert

  9. #9
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    25.10.2007
    Ort
    41462 Neuss
    Alter
    55
    Beiträge
    375
    schön das es so einfach klappt!

    der aufwand bei so etwas ist natürlich stark davon abhängig, welche formatierungsmöglichkeiten man benötigt. wie es scheint brauchst du nur so was in der art "123.456"
    die üblichen bibliotheksroutinen müssen natürlich nen viel größeren anwendungsbereich abdecken, was die sache deutlich aufwendiger macht.

    dann machts auch noch nen unterschied, ob man einige wenige werte umwandeln will, oder ob man millionen von werten in sinnvoller zeit umwandeln muss

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •  

LiFePO4 Speicher Test