Forum: Compiler & IDEs dtostrf mit grosser Zahl


von Sascha (Gast)


Lesenswert?

Hallo zusammen

Könnt ihr mir hier helfen?
1
double d=122333444455555.123456789;
2
char message[50]="TestTestTestTestTestTestTestTestTestTestTestTest/";
3
4
dtostrf( d, 30, 7, message );

Ich erwarte, dass im charArray die ersten 30 Zeichen reserviert werden, 
davon 7 für die Nachkommastellen.

Anschliessend schicke ich alle 50 chars über UART in mein 
Terminalprogramm. Empfangen tu ich jedoch:
1
       122333440000000.0000000<NUL>tTestTestTestTest/<NUL>

Warum stehen da Nullen, und nicht die Zahlenwerte? Anzahl Stellen stimmt 
ja, und auch die folgenden Zeichen des Strings (Char-Arrays) werden 
korrekt übermittelt, weshalb ich nicht auf ein Übermittlungsproblem 
tippe.

wie bekomme ich die ganze Zahl?

von Martin F. (martinf)


Lesenswert?

1
> double d=122333444455555.123456789;

double und float sind hier äquivalent. Beide besitzt eine Genauigkeit 
von ca. 8 Stellen. Und diese 8 Stellen werden dir auch korrekt 
angezeigt; mehr geht mit diesem Datentyp nicht.

Edit:
Hier wirds näher erklärt Beitrag "Genauigkeit von float in AVR-GCC"

von Sascha (Gast)


Lesenswert?

danke!

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

Übrigens wären es selbst mit 64-bit-double nur 14 Stellen, nicht 30.

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.