0

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

8 Antworten

null
    • + Maßanzug statt Massenware +
    • RonaldP
    • vor 1 Jahr
    • Gemeldet - anzeigen

    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

      • Kruna
      • vor 1 Jahr
      • Gemeldet - anzeigen

      Moin Ronald,

       

      es sind einzelne Ziffern - 0-9, selten bis garnicht wird es über 10 sein.

      Ich habe einen Text mit Formeln aufgesetzt zB

      "Die Woche hat " + Zahl+ " Tage".

      Es steht dann - Die Woche hat 7 Tage

      Es sollte aber 'Die Woche hat sieben Tage' stehen.

      Das war nun ein einfaches Beispiel, der eigentliche Text mit Formeln ist wesentlich komplexer.

      Vielen Dank.

      Kruna

    • mirko3
    • vor 1 Jahr
    • Gemeldet - anzeigen

    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)
    
      • Kruna
      • vor 1 Jahr
      • Gemeldet - anzeigen

      Hi Mirko,

      das ist ja Klasse! mal sehen wo ich das einbauen kann 😁

      Nun habe ich versucht das auf die Zahl zu begrenzen bzw anzupassen, aber leider verstehe ich das Skript nicht ganz und weiß nicht so ganz wie ich das umsetzen kann.

      Könntetst Du mir bitte evtl auf die Sprünge helfen?

      Gruß

      Kruna

      • mirko3
      • vor 1 Jahr
      • Gemeldet - anzeigen

      Für Zahlen < = 10 wird es so reichen. Größere Zahlen kannst Du bis 20 selbst nachtragen. Darüber geht es erst mit den Kombinationen los. Bei der Uhrzeit muß es ja bis 59 gehen. Mirko

      let tn := ZAHL;
      let no := ["null", "eins", "zwei", "drei", "vier", "fünf", "sechs", "sieben", "acht", "neun", "zehn"];
      if tn < 11 then item(no, tn) end
      
      • Kruna
      • vor 1 Jahr
      • Gemeldet - anzeigen

      TAUSEND DANK! Das klappt wunderbar, so bekomme ich den Text gut angepasst. 👍

      Mein Ansatz war mit replace, was auch halbwegs ging, jedoch im worklflow bzw bestimmten Textstellen sollte eben nicht 'replaced' werden. So ist es perfekt.

      Gruß Kruna

    • Ninox-Professional
    • planoxpro
    • vor 1 Jahr
    • Gemeldet - anzeigen

    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.

      • Kruna
      • vor 1 Jahr
      • Gemeldet - anzeigen

      Hi, das ist ja auch eine Klasse Lösung und vielen Dank für Deinen Input. Das habe ich mir ebenso abgespeichert, falls mir die 'Problematik mal über den Weg läuft' , da es ja im Moment max bis 8 gegangen ist.

      Ich bin immer wieder begeistert/erstaunt, was man alles mit ninox machen kann.

       

      Gruß

      Kruna