Frank Schönmann: Zahlen in Text umwandeln: Korrigierte Fassung

Beitrag lesen

hi!

Das Problem mit der grundlosen Angabe der "tausend" trat übrigens auch bei Millionen
und allen weiteren folgenden Werten auf, und zwar immer, wenn dieser Dreierblock
eigentlich 000 war. Hm, verständlich? ;)

ja. Da mußt Du hier:

{
    $string = $_ . $namen[$i] . $string;
  }
eine Abfrage machen. Weiterhin fällt mir folgendes auf:

??? Ist doch in der korrigierten Version längst geschehen. Hast du die if-Abfrage übersehen?

1000000: "eins Millionen" statt "eine Million"
1000: "einstausend", naja, ich würde zumindest "eintausend" schreiben. Bei mir ist das "ein
Tausend".

Das stimmt natürlich. Dieses Problem liese sich aber nur mit sehr speziellen if-Abfragen lösen. Zur Zeit ist jedoch alles sehr allgemein gehalten. Die Umwandlung einer Dreiergruppe in Worte hängt alleine vom Wert der Zehnerstelle ab (0, 1 oder >1). Würde ich diese ganzen Probleme lösen, müsste ich sehr viele Abfragen einbauen. Das kann wohl auch jemand anderes übernehmen ;-)) Stichwort: SELFHTML-Workshop :-)

An Stefan: vielleicht kannst du so eine Seite oder einen Bereich aufnehmen für diese und ähnliche Probleme, bei denen mehrere Leute in Zusammenarbeit ein nützliches Skript oder sonstiges basteln :)

1.234: "einhundertvierunddreißig" - da hat er die 2 nach dem Punkt verschluckt?
0.923: "hundertdreiundzwanzig" - offenbar ist der Fehler doch gravierender...
7%4$9&43(12a496: "zweihundertsechsundneunzig" - okay, bei solchen Falscheingaben
kann man eigentlich nichts vernünftiges mehr erwarten... :-)

s/\D//g; filtert sämtliche nicht-Ziffern heraus, das sollte dieses Problem lösen. Aber wenn ich eine Zahl umwandeln will, dann erwarte ich eigentlich auch eine Zahl, nicht eine sinnlose Zusammenwürfelung von Ziffern und Zeichen.

Wenn Du das Problem mit den Sonderzeichen noch in den Griff bekommst (evtl. sogar
Nachkommastellen beachtest), ist das Script fast veröffentlichungsreif.

Nachkommastellen ist doch kein Problem. "0,1234" hieße ja korrekterweise einfach "Null komma eins zwei drei vier".

Schade nur, daß sich Dein Script nicht auf englische Zahlen ("fourtytwo") konvertieren läßt,
ohne die Programmierung zu ändern ;-)))

Das war auch nicht die Aufgabenstellung :) Ich wäre froh gewesen, englische Namen verwenden zu dürfen. Dann hätte ich nicht soviele verschieden Daten-Arrays verwenden müssen.
Warum muss es "eins", "sechs" und "sieben" heißen, bei Zehnern "zehn", "sechzig" und "siebzig", bei Hundertern "ein", "sechs" und "sieben" und bei Zahlen zwischen 10 und 20 "elf", "sechzehn" und "siebzehn"? Vor allem durch diese Unterschiede muss ich so viele verschiedene Werte beachten :-((

Und jetzt freuen wir uns auf die Umwandlung für französische Zahlen. Natürlich ohne Spezialüberprüfung für 91 bis 96 (Patrick?) ;-))

bye, Frank!