Ich erhalte die Meldung: format "%.1f" expects type double, but argument 3 has type float im Befehl sprintf(strValue, "%.1f", f); Warum geht die Typkonvertierung nur mit double? Double braucht ja doppelt so viel Speicherplatz wie float :-(
Im AVR-GCC sind double und float afaik bis auf den Namen gleich. AVR-GCC unterstützt keinen 64-Bit-Fließkommatyp. Sollte deshalb keine Probleme geben.
Das Formatierkennzeichen für float ist %f, nicht %lf (Übrigens ist auch das Formatierkennzeichen für double %f bei printf(). %lf ist eigentlich eine Erweiterung, die gar nicht notwendig wäre).
Es ist nicht "LF" gemeint sondern ".EinsF", sprich auf 1 Nachkommastelle gerundet.
Leicht OT, aber hier wohl passend: Ich empfehle die Verwendung eines eindeutig lesbaren Fonts für die Fixed-Pitch-Darstellung. Courier bzw. Courier New ist diesbezüglich ungeeignet, Andale Mono oder Consolas sind hier ganz eindeutig im Vorteil, weil bei ihnen 0O 1Il bei allen Schriftgrößen sehr deutlich unterscheidbar sind.
> Es ist nicht "LF" gemeint sondern ".EinsF", sprich auf 1 Nachkommastelle > gerundet. Ah. Sorry. Ist mit dem hier verwendetem Font nicht unterscheidbar. Da sollten wir mal mit Andi drüber reden. > Warum geht die Typkonvertierung nur mit double? Double braucht ja > doppelt so viel Speicherplatz wie float :-( Jetzt ist alles klar. Die Antwort ist: Weil printf() eine variadische Funktion ist. D.h. es gibt keinen Prototypen, der dem Compiler sagen würde, wie die Datentypen (mit Ausnahme des ersten Argumentes, dem Formatstring) aussehen. Daher gelten hier Standardregeln. Und eine dieser Standardregeln besagt, dass ein float immer als double übergeben wird. printf() kriegt also niemals einen float zu Gesicht, immer nur double. printf kriegt übrigens auch niemals einen char zu Gesicht, weil eben besagte Regeln festlegen, dass ein char implizit zu einem int hochgecastet ('promoted') wird. Daher ist zb auch printf( "%c", 23 ); kein Problem. 23 ist ein int, und %c holt sich einen int aus der Argumentliste. Wenn allerdings diese Promotingregel nicht wäre, dann hätte man hier: printf( "%c", 'a' ); dann effektiv ein Problem. %c holt sich einen int, als Argument wäre aber nur ein char da. Durch die Promotingregel, dass ein char als int übergeben wird, bügelt sich das alles wieder aus.
> Ah. Sorry. > Ist mit dem hier verwendetem Font nicht unterscheidbar. > Da sollten wir mal mit Andi drüber reden. Das ist nicht Andreas' Aufgabe, das kannst Du bei Deinem Browser leicht selbst einstellen. FF: Extras->Einstellungen->[Inhalt] aufrufen dort den "Erweitert"-Knopf für Schriftarteinstellungen anklicken und im nun erscheinenden Dialog eine andere Schriftart für "Feste Breite" einstellen. Da das für jede einzelne Zeichencodierung einzeln durchzuführen ist, lässt sich das auch mit about:config unter font.name.monospace.x-western font.name.monospace.x-user-def font.name.monospace.x-unicode etc. eintragen. IE: Extras->Internetoptionen->[Allgemein] aufrufen, dort den Knopf "Schriftarten" anklicken und in der rechten Liste auswählen.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.