Startseite › Foren › Deutsches LiveCode-Forum › Zahl im Textfeld formatieren
Schlagwörter: Format, Formatierung, formatnumbers, numbers, Zahlenformat
- Dieses Thema hat 7 Antworten und 3 Teilnehmer, und wurde zuletzt aktualisiert vor 5 Jahren, 10 Monaten von
Klaus Major.
-
AutorBeiträge
-
-
Mai 25, 2019 um 09:45 Uhr #15079
Ich bin absoluter Newbie und versuche seit Tagen erfolglos folgendes umzusetzen: Ich habe verschiedene Textfelder in verschiedenen Tabs in meiner app, in denen ausschließlich Zahlen eingegeben werden können, die dann zur Berechnung herangezogen werden. Da sich diese Zahlen manchmal zwischen 10 und Trillionen bewegen können, ist es gerade bei langen Zahlen sehr unübersichtlich für den User. Daher hätte ich gern Hunderter-Trennpunkte in den Zahlen, also
anstatt 1000 –> 1.000 oder
anstatt 1000000 –> 1.000.000 usw– Wie kann ich das bei der Eingabe der Werte bewerkstelligen?
– An welche Stelle muss ich den code setzen? (in das script jedes einzelnen Feldes oder geht das auch global für alle Textfelder meiner app, die dann eben bei jeder Texteingabe egal welches, wirkt? oder vllt eine globale Funktion [wo werden die definiert dann?], die ich dann bei jedem einzelnen Feld/Gruppe von Feldern aufrufen kann?)
– Welcher Event ist am besten geeignet, um die Formatierung auszulösen? (im Optimalfall während der Eingabe oder besser nachdem man das Textfeld verlassen hat, wie heißt das Event dann?)Ich hoffe, ich konnte mich verständlich ausdrücken. Vielen Dank.
-
Mai 25, 2019 um 10:45 Uhr #15081
Hallo heldenhafte Schildkröte,
willkommen im Forum! 🙂
Die message, die Du suchst, heisst -> on closefield
Die wird gesendet, wenn der Focus das Feld verlässt UND dessen Inhalt geändert wurde!
Wenn der Inhalt nicht geändert wurde, kommt die Message -> on exitfieldZufällig habe ich vor einiger Zeit mal so eine Funktion erstellt, Achtung genau durchlesen und bei Bedarf nachfragen, die ist nicht ganz trivial, aber logisch. 🙂
Du könntest dann den Feldern dieses Skript geben:
on closefield put tausender_trenner(me) into me end closefield
Hier die Funktion, die auch noch Nachkommastellen, per Komma getrennt, in Betracht zieht.
function tausender_trenner tZahl ## Das hier liefern wir am Schluss zurück put empty into zahlMitTausenderTrenner ## Hat die Zahl Nachkommastellen? ## Dann müssen wir uns die merken, denn wir arbeiten nur mit den ganzen Zahlen VOR dem Komma put FALSE into nachkommastellen set itemdel to "," if the num of items of tZahl = 2 then put TRUE into nachkommastellen put item 2 of tZahl into dieNachkommastelle put item 1 of tZahl into tZahl end if ## Nun ganz so, wie man es mit einem Stück Papier, Stift, ## Schere und Uhu machen würde! ## Wenn man sich ein Problem mit eigenen Worten erklären kann ## kann man das fast 1:1 in LC "übersetzen"! repeat ## wir fangen hinten mit den letzten drei Ziffern an: put char -3 to -1 of tZahl into tTemp if the num of chars of tTemp < 3 then put tTemp before zahlMitTausenderTrenner ## Nichts mehr zu trennen, daher: exit repeat else ## Punkt hier einfügen put "." & tTemp before zahlMitTausenderTrenner end if ## Nun die bereits bearbeiteten Ziffern löschen delete char -3 to -1 of tZahl end repeat ## Vielleicht haben wir vorn einen Punkt, den brauchen wir aber nicht if char 1 of zahlMitTausenderTrenner = "." then delete char 1 of zahlMitTausenderTrenner end if ## Nachkommastellen? Dann wieder hinten drankleben if nachkommastellen then put "," & dieNachkommastelle AFTER zahlMitTausenderTrenner end if return zahlMitTausenderTrenner end tausender_trenner
Aber immer dran denken, LC rechnet auf ENGLISCH, erwartet also einen PUNKT als Nachkommetrenner, falls das für Dich von Belang ist.
Für solche Gelegenheiten hat der Onkel natürlich auch vorgesorgt 🙂
Pack das ins Stackskript und rufe es auf bevor Du Berechnungen anstellst.function ohne_komma tZahl replace "," with "." in tZahl return tZahl end ohne_komma function mit_komma tZahl replace "." with "," in tZahl return tZahl end mit_komma
Wenn Du allerdings ein Feld mit obiger Funktion schon mit Punkt UND Kommata versehen hast, müsstest Du zuerst die Tausenderpunkt löschen -> replace „.“ with EMTPY in FeldInhalt
und dann erst die Kommata ersetzen zur Berechnung. Capisce?Beispiel mit schlicher Addition mit Feldern, die schon schön formatiert sind mit Tausendertrenner und allem Zick und Zack:
on mouseup put fld 1 into Summand1 put fld 2 into Summand2 ## Tausendertrenner entfernen! replace "." with EMPTY in Summand1 replace "." with EMPTY in Summand2 ## Für die Berechnung durch LC vorbereiten = Komma durch Punkt ersetzen ## Ich habe die beiden Schritte zusammengefasst: put ohne_komma(Summand1) + ohne_komma(Summand2) into tErgebnis ## Ergebnis der Addition nett formatieren und ins Feld schreiben ## Wir sind in Germanien, also zuerst: put mit_komma(tErgebnis) into tergebnis put tausender_trenner(tErgebnis) into fld "ergebnis" end mouseup
Liebe Grüße
Klaus
-
Mai 25, 2019 um 14:32 Uhr #15084
Boa Klaus… vielen Dank, du bist mein Held… da muss ich mich als absoluter Newbie erstmal durchwurschteln, aber werd’s schon verstehen, wenn nicht, melde ich mich ganz bestimmt wieder. Happy Weekend. xo
Edit: Meine app arbeitet ausschließlich mit Ganzzahlen, das macht es dann sicher schon mal einfacher. 😉
-
Mai 25, 2019 um 14:39 Uhr #15087
Gern geschehen, ich weiß wie steil die Lernkurve von LC ist!
Ich habe mir das vor knapp 20 Jahren OHNE Internetzugang (= Hilfe jeglicher Art) beigebracht, nur Try & Error, DAS schult! 😀 -
Mai 25, 2019 um 14:47 Uhr #15089
Noch ein Hinweis:
... ## Nachkommastellen? Dann wieder hinten drankleben if nachkommastellen then put "," & dieNachkommastelle AFTER zahlMitTausenderTrenner end if ...
Die Variable nachkommastellen enthält einen Bool’schen Wert, also TRUE oder FALSE.
Wenn wir den Vergleich weglassen -> if nachkommastellen = TRUE/FALSE
nimmt LC automatisch an, wir meinen TRUE!
Dieser „Optimismus“ von LC spart uns etwas Tipparbeit. 🙂 -
Mai 31, 2019 um 14:25 Uhr #15191
Bin schon wieder beindruckt, was der Klaus alles nebenbei so mal löst.
Hut ab
Herby -
Mai 31, 2019 um 19:51 Uhr #15195
You can leave your hat on! 😀
-
Juni 2, 2019 um 21:01 Uhr #15214
-
-
AutorBeiträge
- Du musst angemeldet sein, um auf dieses Thema antworten zu können.