PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Integer --> String, mit führenden Nullen



maker7
09.07.2010, 16:56
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.


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


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.

Schonmal Danke für eure Antworten.

Grüße
Elias

Besserwessi
09.07.2010, 21:31
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.

Jaecko
10.07.2010, 09:43
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.

Besserwessi
10.07.2010, 10:33
Der logarithmus ist eine ausgesprochen langsame Funktion und braucht relativ viel Code. Den sollte man also wenn es irgend geht vermeiden.

Netzman
10.07.2010, 13:11
Einfacher und kürzer als 3 IF-Abfragen wirds wohl kaum gehen...

mfg

maker7
10.07.2010, 14:21
Einfacher und kürzer als 3 IF-Abfragen wirds wohl kaum gehen...

mfg

Das freut mich zu hören.
Dachte schon man würde mich auslachen, weil ich das so "komisch" gelöst habe.


Grüße
Elias

PicNick
10.07.2010, 14:25
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

screwdriver
12.07.2010, 20:30
@PicNick
Wenn ich schon die Zahl in eine Zeichenkette umwandle. Wieso dann nicht den FORMAT Befehl nutzen?

PicNick
13.07.2010, 07:48
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.

screwdriver
13.07.2010, 18:03
@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.

PicNick
13.07.2010, 18:08
Hab' ich auch garnicht so verstanden :-)
Wie du sagst, es gibt mehrere Möglichkeiten, die ihr Für und Wider haben.