Eine Möglichkeit für Führende Nullen ist es eine Konstante wie 10000 zu der Zahl zu addieren, und dann die Führende 1 beim String wieder zu entfernen. Man muß nur aufpassen das die Zahl nicht zu groß wird und ggf. auf den Long Datentyp ausweichen.
Hallo,
ich habe schon wieder eine Frage an euch Experten.
Da ich Probleme mit der Ausgabe von Integer-Werten auf einem LCD habe, bediene ich mich aktuell einer eher komplizierten Routine um führende Nullen mit anzuzeigen. Im einzelnen Frage ich meinen Ausgabewert auf seine Größe ab und setze dann individuell für jede "Länge" ein paar Nullen davor.
So sieht das dann aus.
Gibt es da nun eine elegantere Lösung? Ich stelle mir irgendwas vor, was mir einen Integer-Wert in einen String mit bestimmter Länge schreibt und freie Zeichen vor dem eigentlichen Wert mit Nullen aufgefüllt werden.Code:Locate 3 , 1 Lcd "Attempts: " If Attemptsint <= 9 Then 'display leading zeros Lcd "000" Elseif Attemptsint <= 99 Then Lcd "00" Elseif Attemptsint <= 999 Then Lcd "0" End If Lcd Attemptsint
Schonmal Danke für eure Antworten.
Grüße
Elias
Eine Möglichkeit für Führende Nullen ist es eine Konstante wie 10000 zu der Zahl zu addieren, und dann die Führende 1 beim String wieder zu entfernen. Man muß nur aufpassen das die Zahl nicht zu groß wird und ggf. auf den Long Datentyp ausweichen.
Eine Möglichkeit, die mir noch einfallen würde (wo ich aber jetzt nicht weiss, ob Bascom die kann bzw. ob sich da nicht unheimlich der Code aufbläht):
Mit dem log10 kann man ja grob sagen, wie viele Stellen bzw. "folgende Nullen" eine Zahl hat. Also log10 berechnen und das Ergebnis auf die nächste ganze Zahl hochziehen.
log10(100) = 2, nächste ganze Zahl = 3 => 3 Stellen
log10(7483) = 3,874 => 4 => 4 Stellen.
Damit könnte man dann die Anzahl der noch fehlenden Nullen vorne dran einfach ausrechnen.
#ifndef MfG
#define MfG
Der logarithmus ist eine ausgesprochen langsame Funktion und braucht relativ viel Code. Den sollte man also wenn es irgend geht vermeiden.
Einfacher und kürzer als 3 IF-Abfragen wirds wohl kaum gehen...
mfg
Das freut mich zu hören.Zitat von Netzman
Dachte schon man würde mich auslachen, weil ich das so "komisch" gelöst habe.
Grüße
Elias
Bei der Einschränkung auf insges. 4 Stellen ohne Vorzeichen bist du, wie @Netzman sagte, mit "IF" wohl am besten dran.
Für eine allgemeine Lösung:
Umwandeln auf string (musst du ja sowieso)
Länge string abfragen
und dann z.B
die differenz auf die gewünschten Stellen im Display mit "0" auffüllen
mfg robert
Wer glaubt zu wissen, muß wissen, er glaubt.
@PicNick
Wenn ich schon die Zahl in eine Zeichenkette umwandle. Wieso dann nicht den FORMAT Befehl nutzen?
Die Genialität einer Konstruktion liegt in ihrer Einfachheit. - Sergej P. Koroljow
Bascom muss zur Laufzeit den format-string interpretieren, bis er weiss, was zu tun ist. Das gibt einigen Overhead.
Wenn man das aber akzeptiert, hast du wahrscheinlich recht.
mfg robert
Wer glaubt zu wissen, muß wissen, er glaubt.
@PicNick
Es geht mir nicht ums "Rechthaben". Soll jeder machen wie er will, solange es funktioniert.
Der TS fragte nach einer eleganten Möglichkeit und ich war lediglich über die gemachten Vorschläge etwas irritiert.
Die Genialität einer Konstruktion liegt in ihrer Einfachheit. - Sergej P. Koroljow
Lesezeichen