Zahlen als Wort(e)

Verschiedenste Beispiele rund um 3D PDFs
armine
Beiträge: 2690
Registriert: 16.05.2009, 10:24

Zahlen als Wort(e)

Beitrag von armine » 02.01.2012, 12:24

Hallo,

im Web habe ich einige wenige Beispiele auf deutsch gefunden, aber leider ohne Code. Die vom mir gefundenen Eindeuschungen von [font=courier new]ConvertToWords[/font] führen manchmal nicht nur zu putzigen Ergebnissen, sondern ignoriern auch, dass eintausend Millionen keine "billion", sondern nach mathematischem (und auch deutschem) Verständniss eine Milliarde ist.

Die beigestellte Funktion (JavaScript) akzeptiert die Übergabe von Zahlen (LCD unterstüzt 15 Stellen) und Strings (das geht bis in die Billiarden und damit sollte von der normalen Rechnung bis zu den Staatschulden alles abgedeckt sein). Die Dezimalen werden abgeschnitten. Der Rückgabewert ist eine (hoffentlich dudenkonforme) Zeichenkette.

Gruß
armine
Du hast keine ausreichende Berechtigung, um die Dateianhänge dieses Beitrags anzusehen.

uli1962
Beiträge: 3
Registriert: 10.06.2013, 23:48

Zahlen als Wort(e)

Beitrag von uli1962 » 02.08.2013, 11:03

wie kann man den Dokumenteschutz aufheben

armine
Beiträge: 2690
Registriert: 16.05.2009, 10:24

Zahlen als Wort(e)

Beitrag von armine » 02.08.2013, 13:01

Hallo uli1962,

das PDF ist nicht geschützt. Zum Öffnen brauchst du den Adobe LiveCycle Designer.

vg armine

uli1962
Beiträge: 3
Registriert: 10.06.2013, 23:48

Zahlen als Wort(e)

Beitrag von uli1962 » 02.08.2013, 15:02

ich arbeite mit MAC, dafür ist LC leider nicht erhältlich.
kann ich an das script kommen für Acrobat Pro?

armine
Beiträge: 2690
Registriert: 16.05.2009, 10:24

Zahlen als Wort(e)

Beitrag von armine » 02.08.2013, 18:12

Hallo uli1962,

mit Code für den Acrobat kann nicht dienen, aber vielleicht machst du eine Übersetzung und stellst sie dem Forum zur Verfügung. Mittlerweile gibt es eine überarbeite Version die
– auch Dezimale in Worten
– Dezimale als Bruch
– Dezimale als Bruch mit führenden Nullen und
– ein neg. Vorzeichen als „minus“
ausgibt.

vg armine

Der Code der Funktion (in kleiner Schrift, um ungewollte Zeilenumbrüche möglichst zu vermeiden):
[font=courier new][fontsize=1]function Zahl_in_Worten(Zahl, Einheit, Dezimale, Zähler, NumNenner) {
/*    Zahl        = Zahl mit max. 15 signifikanten Stellen.
    Einheit        = Name der Einheit und gegebenfalls ihrer Unterteilung (z.B. ["Euro","Cent"], immer als Array übergeben).
                  Werden keine Dezimalen in Ziffern bzw. Brüche ausgegeben, darf nur der Name der Einheit übergeben werden (z.B. ["Euro"]).
    Dezimale    = Anzahl der Nachkommastellen; 0 bei Ganzzahlen oder – abhängig von der Einheit – 2 bzw. 3.
                  Werden mehr Nachkommastellen übergeben, wird auf diese Genauigkeit gerundet. Bei Brüchen: Auflösung des Zählers.
    Zähler        = Flag für die Ausgabe als Bruch und Darstellung des Zählers (0 ~ mit führenden Nullen, 1 ~ ohne führende Nullen)
    NumNenner    = Flag für die Ausgabe des Nenners ("0" ergibt bei Einheit == 2.19 eine Ausgabe von "zwei und 19/100 Euro"; "1" führt zur Ausgabe "zwei Euro und 19 Cent")
*/
    var Einer    = ["", "ein", "zwei", "drei", "vier", "fünf", "sechs", "sieben", "acht", "neun", "zehn",
                    "elf", "zwölf", "dreizehn", "vierzehn", "fünfzehn", "sechzehn", "siebzehn", "achtzehn", "neunzehn"] ;
    var Zehner    = ["", "", "zwanzig", "dreißig", "vierzig", "fünfzig", "sechzig", "siebzig", "achtzig", "neunzig"] ;
    var Gruppe    = ["", "tausend", "Million", "Milliarde", "Billion", "Billiarde"] ;
    var Worte    = (Zahl < 0) ? "minus " : "" ;
    Zahl = (Math.round(Math.abs(Zahl) * Math.pow(10, Dezimale)) / Math.pow(10, Dezimale)).toString().split(/\./) ;
    Zahl[1] = Zahl[1] ? Zahl[1] * Math.pow(10, Dezimale - Zahl[1].length) : 0 ;
    if (Zähler != undefined) {
        var Nenner = Math.pow(10, Dezimale) ;
        Zähler = Zähler ? Zahl[1] : [(Zahl[1] + Nenner).toString().substr(1)], Zahl[1][Zähler] ;
        if (NumNenner) {
            Zähler = "und " + Zähler + "/" + Nenner + " " + Einheit[0]
        } else {
            Zähler = Einheit[0] + " und " + Zähler + Einheit[1] ;
            Einheit.pop()
        }
    }
    for (var x = 0; x < Einheit.length; x++) {
        Worte =    Worte + (Zahl[x] > 0 ? "" : "null") ;
        Glieder = new Array() ;
        for (var i = 0; Zahl[x] > 0; i++) {
            Glieder = Zahl[x] % 1000 ;        // segmentweise ins Array und ...
            Zahl[x] = Math.floor(Zahl[x] / 1000)
        }
        for (i = i; i >= 0; i--) {                // ... segmentweise verarbeitet
            if (!Glieder) {
                if (i == 1 && Glieder[0] > 0 && Glieder[1] == 0 && Dezimale == undefined) Worte = Worte + "und " ;
            } else {
                if (Glieder > 99) {
                    Worte = Worte + Einer[Math.floor(Glieder / 100)] + "hundert"
                } else if (i == 0 && Glieder[1]) {
                    Worte = Worte + "und"
                }
                if (Glieder % 100 < 20) {
                    Worte = Worte + Einer[Math.floor(Glieder % 100)]
                } else {
                    var Hilfszahl = Glieder + 1000 ;
                    var Hilfsziffer = Hilfszahl - Math.floor(Hilfszahl / 10) * 10 ;
                    Worte = Worte + Einer[Hilfsziffer] ;
                    if (Hilfszahl) Worte = Worte + (Hilfsziffer ? "und" : "") + Zehner[Math.floor(Hilfszahl % 100 / 10)] ;
                }
                if (i < 2) {                                     // gilt bei < 1 000 000
                    Worte = Worte + Gruppe ;
                } else {
                    if (Glieder == 1) {
                        Worte = Worte + "e " + Gruppe + " "    // ein"e" Million
                    } else if (i == 2 || i == 4) {
                        Worte = Worte + " " + Gruppe + "en "    // x Million"en" / Billion"en"
                    } else if (i > 2) {
                        Worte = Worte + " " + Gruppe + "n "    // x Milliarde"n" / Billiarde"n"
                    }
                }
            }
        }
        Worte =    Worte + " " + Einheit[x] + (Einheit[x+1] ? " und " : "") ;
    }
    if (Zähler == undefined) {
        return Worte
    } else {
        return Worte.replace(Einheit[0],"") + Zähler
    }
}
[/fontsize][/font][fontsize=1]
[/fontsize]
Du hast keine ausreichende Berechtigung, um die Dateianhänge dieses Beitrags anzusehen.

uli1962
Beiträge: 3
Registriert: 10.06.2013, 23:48

Zahlen als Wort(e)

Beitrag von uli1962 » 02.08.2013, 18:19

Tausend Dank
Ich werde sehen was ich tun kann
Gruss Uli

pes
Beiträge: 1
Registriert: 18.02.2016, 14:34

Zahlen als Wort(e)

Beitrag von pes » 10.06.2016, 17:00

Vielen Dank,
Der Code war eine sehr gute Hilfe

Mw1986
Beiträge: 18
Registriert: 27.06.2016, 15:35

Zahlen als Wort(e)

Beitrag von Mw1986 » 28.06.2016, 14:36

Hallo in der Runde,

ich verzweifel gerade an dem Code. Arbeite mit AC XI Pro. Bin relativ neu. Die Zahl ist eine Summe, die umgewandelt werden soll.

Es gibt ja zwei Möglichkeiten: Entweder über Aktionen oder über Berechnung. Aber mit beiden komme ich nicht weiter.

Besten Dank für die Hilfe im Voraus.

Gruß
Mw

armine
Beiträge: 2690
Registriert: 16.05.2009, 10:24

Zahlen als Wort(e)

Beitrag von armine » 29.06.2016, 09:13

Hallo Mw,

hier ist die Umsetzung für Acrobat.

vg armine
Du hast keine ausreichende Berechtigung, um die Dateianhänge dieses Beitrags anzusehen.

Mw1986
Beiträge: 18
Registriert: 27.06.2016, 15:35

Zahlen als Wort(e)

Beitrag von Mw1986 » 29.06.2016, 10:11

Vielen Dank. Java ist bei mir leider noch eine Baustelle, die ich in den nächsten Wochen angehen muss.

Antworten