Forum: Mikrocontroller und Digitale Elektronik Float to Ascii String im Eigenbau


von Stefan (Gast)


Lesenswert?

HalliHallo

Die Funktion dtostre(...) aus stdlib.h ist eigentlich das was ich 
brauche und funktioniert auch soweit.

Jedoch möchte ich meinen Ascii String im Format x.xxxx-E009.
Also das heisst, wenn ich eine Float Zahl 1.0321 in die Funktion gebe, 
soll 1.0321-E009 (in einem Char String im ASCII Format) zurück gegeben 
werden. bei 1032.1 entprechend 1.0321-E006.

Wie stelle ich das am besten an?

Vielen Dank für Hilfe

Grüsse Stefan

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

> 1.0321 in die Funktion gebe, soll 1.0321-E009 ...
> bei 1032.1 entprechend 1.0321-E006.
Was soll denn dann bei 10.321 herauskommen?
10.321-E009 oder 1.0321-E008

von eProfi (Gast)


Lesenswert?

Mir ist noch unklar, was genau Du willst.

> Also das heisst, wenn ich eine Float Zahl 1.0321 in die Funktion
> gebe, soll 1.0321-E009 (in einem Char String im ASCII Format)
> zurück gegeben werden. bei 1032.1 entprechend 1.0321-E006.

1.0321-E009 ist aber was anderes als 1.0321 .
Es ist 0,0000000010321
d.h. Du musst 1.0321 noch durch 1000000000 (1.0e+9) teilen, um auf das 
gewünschte Ergebnis zu kommen.

Üblicherweise schreibt man nicht 1.0321-E009 , sondern 1.0321E-009 .

Oder meinst Du ganz was anderes? Dann beschreibe es genauer.

von Stefan (Gast)


Lesenswert?

Lothar Miller schrieb:
> Was soll denn dann bei 10.321 herauskommen?
> 10.321-E009 oder 1.0321-E008

10.321-E009, also den technischen Expnenten.

eProfi schrieb:
> 1.0321-E009 ist aber was anderes als 1.0321 .
> Es ist 0,0000000010321
> d.h. Du musst 1.0321 noch durch 1000000000 (1.0e+9) teilen, um auf das
> gewünschte Ergebnis zu kommen.

Dies ist mir klar. Die ausgabe soll in Meter geschehen, intern habe ich 
aber den Wert auf nm. daher die schreibweise.

>
> Üblicherweise schreibt man nicht 1.0321-E009 , sondern 1.0321E-009 .
>

Ich meine es schon so. Mein Fehler, werde es in diesem Fall mit E-009 
realisieren.

von Karl H. (kbuchegg)


Lesenswert?

Ich würde es so angehen:

Die Zahl zunächst in den Bereich 0 bis 1000 normieren. Dabei mitzählen, 
wieviele 10-er Potenzen dazu notwendig waren. Da kommen dann noch 9 weg. 
Dann von dtostrf von der Basis die ASCII Darstellung berechnen lassen 
und den Exponenten selbst umwandeln und mittels strcat drannhängen.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.