Zahl als Text umwandeln
Hallo zusammen,
wie kann ich eine Zahl als Text umwandeln, zB 1 in eins, 2 in zwei usw.
Vielen Dank schon mal.
Gruß Kruna
11 Antworten
-
Moin ,
es gibt meines Wissens keinen direkten NX-Befehl dafür.
Für bessere/mehr Hilfe braucht es mehr Infos.Wie soll es den im Detail werden?
Nur einzelne Ziffern? Von 0 bis ...? Wie soll z.B. 145 als zahlwort aussehen?
KI kann sowas ;-) (und toleriert sogar schreibfehler :-D)Vg Ronald
-
Ich habe mal so etwas für eine Uhr umgesetzt. Das könnte man sich noch auf ein paar Stellen mehr erweitern :-) Mirko
let tn := time(now()); let no := ["null", "ein", "zwei", "drei", "vier", "fünf", "sechs", "sieben", "acht", "neun", "zehn", "elf", "zwölf", "dreizehn", "vierzehn", "fünfzehn", "sechzehn", "siebzehn", "achzehn", "neunzehn", "zwanzig", "dreißig", "vierzig", "fünfzig", "eins"]; let m := number(format(tn, "m")); let mm := number(format(tn, "mm")); let h := number(format(tn, "h")); let hh := number(format(tn, "hh")); let resultM := switch true do case mm = 0: "" case mm = 1: "eins" case mm / 10 = 3: "dreißig" case mm / 10 = 4: "vierzig" case mm / 10 = 5: "fünfzig" case mm < 21: item(no, m) case floor(mm / 10) = 2: item(no, substr(text(mm), -1)) + "und" + item(no, 20) case floor(mm / 10) = 3: item(no, substr(text(mm), -1)) + "und" + item(no, 21) case floor(mm / 10) = 4: item(no, substr(text(mm), -1)) + "und" + item(no, 22) case floor(mm / 10) = 5: item(no, substr(text(mm), -1)) + "und" + item(no, 23) end; let resultH := switch true do case hh < 21: item(no, hh) case floor(hh / 10) = 2: item(no, substr(text(hh), -1)) + "und" + item(no, 20) case floor(hh / 10) = 3: item(no, substr(text(hh), -1)) + "und" + item(no, 21) case floor(hh / 10) = 4: item(no, substr(text(hh), -1)) + "und" + item(no, 22) case floor(hh / 10) = 5: item(no, substr(text(hh), -1)) + "und" + item(no, 23) end; let result := resultH + " Uhr " + resultM; let content := "<style> p { text-align: center; font-family: Courier; font-size: large; } </style> <p>" + result + "</p> "; html(content)
-
Als weitere Idee: In Fließtexten schreibt man der Regel nach die Zahlen bis 12 ja als Zahlwörter, darüber hinaus als Ziffern. Das habe ich mal so gelöst:
let myA1 := ["null", "ein", "zwei", "drei", "vier", "fünf", "sechs", "sieben", "acht", "neun", "zehn", "elf", "zwölf"]; let myTxt := if Zahl <= 13 then item(myA1, Zahl) else text(Zahl) end; "Es sind " + myTxt + " Luftballons."
Und für Zahlwörter bis 99:
let myAE := ["null", "ein", "zwei", "drei", "vier", "fünf", "sechs", "sieben", "acht", "neun", "zehn", "elf", "zwölf", "dreizehn", "vierzehn", "fünfzehn", "sechzehn", "siebzehn", "achtzehn", "neunzehn"]; let myAZ := ["null", "zehn", "zwanzig", "dreißig", "vierzig", "fünfzig", "sechzig", "siebzig", "achtzig", "neunzig"]; let myTxt := ""; myTxt := if Zahl <= 19 then item(myAE, Zahl) else if Zahl <= 99 then let myZ1 := number(substr(text(Zahl), 0, 1)); let myZ2 := number(substr(text(Zahl), 1, 1)); if myZ2 = 0 then item(myAZ, myZ1) else item(myAE, myZ2) + "und" + item(myAZ, myZ1) end else text(Zahl) end end; "Es sind " + myTxt + " Luftballons."
Das ließe sich mit weiteren Arrays für Hunderter, Tausender usw. bei Bedarf bei Bedarf noch erweitern.
-
Dieser aktuelle Code funktioniert zuverlässig und fehlerfrei bis einschließlich:
999.999.999,99
(neunhundertneunundneunzig Millionen neunhundertneunundneunzigtausend
neunhundertneunundneunzig Komma neunundneunzig)
Glaube ich zumindest :)
ist vielleicht etwas steif programmiert aber funktioniert
let myZahl := number('Gesamtsumme (€)'); let myGanz := floor(myZahl); let myDezimal := round((myZahl - myGanz) * 100); let myAE := ["null", "ein", "zwei", "drei", "vier", "fünf", "sechs", "sieben", "acht", "neun", "zehn", "elf", "zwölf", "dreizehn", "vierzehn", "fünfzehn", "sechzehn", "siebzehn", "achtzehn", "neunzehn"]; let myAZ := ["null", "zehn", "zwanzig", "dreißig", "vierzig", "fünfzig", "sechzig", "siebzig", "achtzig", "neunzig"]; let myTxt := ""; let myMillionen := 0; let myTausend := 0; let myRest := 0; let myRest1 := 0; let myRest2 := 0; let myMioH := 0; let myRestMio := 0; let myMioZ1 := 0; let myMioZ2 := 0; let myTH := 0; let myTRest := 0; let myTZ1 := 0; let myTZ2 := 0; let myH := 0; let myRest99 := 0; let myRZ1 := 0; let myRZ2 := 0; let myDezZ1 := 0; let myDezZ2 := 0; "--- Millionen ---"; myMillionen := floor(myGanz / 1000000); myRest1 := myGanz % 1000000; if myMillionen > 0 then if myMillionen <= 19 then myTxt := myTxt + item(myAE, myMillionen) else myMioH := floor(myMillionen / 100); myRestMio := myMillionen % 100; if myMioH > 0 then myTxt := myTxt + if myMioH = 1 then "einhundert" else item(myAE, myMioH) + "hundert" end end; if myRestMio > 0 then if myRestMio < 20 then myTxt := myTxt + item(myAE, myRestMio) else myMioZ1 := floor(myRestMio / 10); myMioZ2 := myRestMio % 10; myTxt := myTxt + if myMioZ2 > 0 then item(myAE, myMioZ2) + "und" else "" end + item(myAZ, myMioZ1) end end end; myTxt := myTxt + if myMillionen = 1 then "million" else "millionen" end end; "--- Tausend ---"; myTausend := floor(myRest1 / 1000); myRest2 := myRest1 % 1000; if myTausend > 0 then if myTausend = 1 then myTxt := myTxt + "eintausend" else myTH := floor(myTausend / 100); myTRest := myTausend % 100; if myTH > 0 then myTxt := myTxt + if myTH = 1 then "einhundert" else item(myAE, myTH) + "hundert" end end; if myTRest > 0 then if myTRest < 20 then myTxt := myTxt + item(myAE, myTRest) else myTZ1 := floor(myTRest / 10); myTZ2 := myTRest % 10; myTxt := myTxt + if myTZ2 > 0 then item(myAE, myTZ2) + "und" else "" end + item(myAZ, myTZ1) end end; myTxt := myTxt + "tausend" end end; "--- Rest unter 1000 ---"; myH := floor(myRest2 / 100); myRest99 := myRest2 % 100; if myH > 0 then myTxt := myTxt + if myH = 1 then "einhundert" else item(myAE, myH) + "hundert" end end; if myRest99 < 20 and myRest99 > 0 then myTxt := myTxt + item(myAE, myRest99) else myRZ1 := floor(myRest99 / 10); myRZ2 := myRest99 % 10; myTxt := myTxt + if myRZ2 > 0 then item(myAE, myRZ2) + "und" else "" end + if myRZ1 > 0 then item(myAZ, myRZ1) else "" end end; "--- Dezimalstellen (korrekt: zwei Stellen) ---"; if myDezimal > 0 then myDezZ1 := floor(myDezimal / 10); myDezZ2 := myDezimal % 10; myTxt := myTxt + " Komma "; if myDezimal < 20 then myTxt := myTxt + item(myAE, myDezimal) else myTxt := myTxt + if myDezZ2 > 0 then item(myAE, myDezZ2) + "und" else "" end + item(myAZ, myDezZ1) end end; if myTxt = "" then myTxt := "null" end; myTxt := upper(substr(myTxt, 0, 1)) + substr(myTxt, 1); myTxt + " Euro"
Content aside
- Status Answered
- gesternZuletzt aktiv
- 11Antworten
- 151Ansichten
-
5
Folge bereits