Ich möchte die Werte des Stromzählers rechtsbündig anordnen.
Mein Plan war, die Zahl in String umzuwandeln und den "Freiraum" vor den Zahl mit Leerzeichen aufzufüllen.
Leider werden Leerzeichen direkt am Anfang der Zeile in der Anzeige ignoriert. Zwei oder mehr Leerzeichen hintereinander werden auch nur als ein Leerzeichen angezeigt. Andere Zeichen wie Punkt oder Unterstrich werden direkt am Anfang und auch mehrfach angezeigt, sehen aber optisch nicht aus. Auch ist der Punkt von der Breite her schmaler (also proportional) und die Ziffern nichtproportional.
Des Weiteren werden z.B. bei einer gewünschten 12-stelligen Anzeige des Wertes -123 nur die 8 Punkte für den Freiraum und -1 angezeigt, aber die 23 nicht mehr. Ich habe festgestellt, dass hierfür ssize (bei >D) erhöht werden muss. Standardmäßig beträgt dieser Wert ja schon 19 Zeichen, sodass ich mir das bei 12 Zeichen nicht erklären kann.
Nachfolgend der Screenshot mit vorweg einigen anderen Formatierungen als Zahl und auch der dazugehörige Code:
D
; Inspiriert von
; https://forum.creationx.de/forum/index.php?thread/4198-web-ui-script-betr%C3%A4ge-rechtsb%C3%BCndig-und-zahl-mit-komma-dezimal/&dtID=44053&highlight=script#dt44053
; Eine Zahl ohne Dezimalstellen in einen String mit vorgegebener Stellenanzahl umwandeln.
; Falls die Zahl doch Dezimalstellen hat, werden diese abgeschnitten, nicht gerundet.
; Die Funktion round(x) funktioniert nur mit einem Punkt als Dezimalzeichen, nicht mit einem Komma!
zahl=0 ; Zahl
strzahl="" ; Zahl als string
stellen=0 ; Anzahl der Gesamtstellen der auszugebenden Zahl (inkl. Leerzeichen)
anzahl=0 ; Stellenzähler
cnt=0 ; Schleifenzähler
>B
zahl=-123
stellen=12
#ZahlRechts
; Zahl in String umwandeln. Dabei werden die Dezimalstelle einfach abgeschnitten
strzahl=s(0,0zahl)
; Anzahl der Zeichen der Zahl berechnen (das Minus-Zeichen wird mitgezählt)
anzahl=sl(strzahl)
; Falls die Zahl weniger Anzahl an Zeichen als gewünscht hat, werden die fehlenden Stellen linksseitig aufgefüllt.
if anzahl<stellen {
for cnt anzahl+1 stellen 1
anzahl+=1
strzahl="."+strzahl ; seltsamerweise bei 12 Stellen von ssize abhängig
; U+2800 BRAILLE PATTERN BLANK, seltsamerweise von ssize noch stärker abhängig
; strzahl="⠀"+strzahl
next
}
>W
zahl{m}%zahl%
0zahl{m}%0zahl%
0,1zahl{m}%0,1zahl%
8,1zahl{m}%8,1zahl%
strzahl{m}%strzahl%
{m}12345678901234567890123456
%=#ZahlRechts
stellen{m}%0stellen%
anzahl{m}%0anzahl%
#
Alles anzeigen
Ziel ist es nun, den Braille Pattern Blank als Füllzeichen zu verwenden. Dieser nimmt genauso viel Platz wie eine Ziffer ein und lässt sich auch am Anfang und auch mehrfach hintereinander anwenden. Nur muss dann ssize noch größer gewählt werden als beim Punkt, was ich nicht nachvollziehen kann.
Warum ist das alles so? Hat einer eine Erklärung oder vielleicht sogar einen Lösungsansatz parat? Danke.