2017-10-03 24 views
0

Ich programmiere einen Mikrocontroller in C und da der Compiler oder Chip nicht sehr gut mit Gleitkommazahlen umgehen kann, ist es empfehlenswert, den Gleitkommawert so hoch zu skalieren, dass die Dezimalzahl verschwindet und dann die Zahl ausgegeben wird. skaliere es mit einer proportionalen Division zurück und verwende den Modulus, um den Bruchteil zu finden und anzuzeigen. Hier ein Beispiel: Beginnen Sie mit der Nummer 25.0625. Multiplizieren Sie mit 10000, um 250625 zu erhalten. Gut, jetzt haben wir keinen Schwimmer mehr. Nun ist diese anzuzeigen verwenden wir eine Zeile wie diese:C-Programmierung: Ignoriert der Modul führende Nullen im Ergebnis? Wie kann ich damit aufhören?

sprintf(buffer, "%li.%i", Temp/10000, abs(Temp % 10000)); 

So wir zuerst die 25 wieder raus durch / 10000, dann erhalten wir die 0625 out von % 10000. Hier ist das Problem: Es scheint, dass mein Modulo-Ergebnis die führende Null in 0625 ignoriert. Wenn es die Zahl wieder zusammenfügt, wird es 25.625 anstelle von 25.0625. Ich kann nicht darauf zählen, dass es immer eine führende Null gibt, also ist das Stempeln einer Null nicht die Antwort, und es könnte zu anderen Zeiten mehrere führende Nullen geben. Meine Frage ist, wie kann ich den Modul unterdrücken, indem führende Nullen ausgeschlossen werden? Vielen Dank.

+1

Führende Nullen bestehen nicht numerisch; Verwenden Sie '% 04i', um eine ganze Zahl mit vier Ziffern zu formatieren. – Ryan

+1

Zahlen haben keine führenden Nullen, sie sind nur Zahlen. Sie können das Format "% 04d" verwenden, um es mit 4 Ziffern zu drucken. – Barmar

+0

BTW, 'sprintf (Puffer,% li.% I", Temp/10000, abs (Temp% 10000)); 'ist sicherlich falsch Ausgabe mit' Temp = -123'. – chux

Antwort

3

Sie können sprintf anweisen, die Nummer in einem 4-stelligen Feld mit führenden Nullen zu formatieren.

sprintf(buffer, "%li.%04d", Temp/10000, abs(Temp % 10000)); 

Siehe Printing leading 0's in C?

+0

Auch '% .4d' macht den gleichen Job. Es gibt einige, die argumentieren, dass es gegenüber '% 04d' bevorzugt wird. –

+0

@ JonathanLeffler Ich sehe diese Empfehlung in keiner der Antworten auf die Frage, die ich gerade verlinkt habe. – Barmar

+0

Es scheint zu fehlen. Ich möchte eine Referenz für "es gibt diejenigen, die ..." ausgraben, bevor ich viel weiter gehe. Die x-rot bezieht sich auch eher auf Postleitzahlen als auf Ganzzahl-/Festkommaarithmetik. –

Verwandte Themen