-
-
Erfahrener Benutzer
Fleißiges Mitglied
Double to String?
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,
-
Erfahrener Benutzer
Robotik Einstein
AVR-GCC?
dtostrf() aus <stdlib.h>
Alles weitere findest du in der avr-libc-Doku.
-
Erfahrener Benutzer
Fleißiges Mitglied
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,
-
Erfahrener Benutzer
Fleißiges Mitglied
Oh, blöd!!
Tschuldigts!! Ich bin im falschen Unterforum!
War nicht meine Absicht!
Sorry!!
-
Erfahrener Benutzer
Roboter-Spezialist
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!).
-
Erfahrener Benutzer
Fleißiges Mitglied
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.
-
Erfahrener Benutzer
Roboter-Spezialist
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)
-
Erfahrener Benutzer
Fleißiges Mitglied
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
-
Erfahrener Benutzer
Roboter-Spezialist
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
-
Foren-Regeln
Lesezeichen