![]() |
Eine Zahl in Aussprache umwandeln...
Hallo zusammen...
okay der Titel klingt ein wenig komisch, aber ich kenne leider nicht den Fachbegriff für eine derartige Operation: Zahlen (Integer, Real) in Sprache umzusetzen. Für alle denen das immer noch zu schwammig ist: Ich habe eine Zahl 188, was ich, möchte ist eine Umwandlung in die natürliche Aussprache, also "einhundertachtundachzig". Weiß jemand rat, hat so etwas vielleicht schon programmiert - oder kennt eine entsprechende Komponente? Vielen Dank für die Hilfe! |
Re: Eine Zahl in Aussprache umwandeln...
Eins ist mir noch nicht ganz klar: möchtest du eine Ausgabe als Text oder eine echte Sprachausgabe (zum anhören)?
Für letzteres wäre das Microsoft SpeechSDK geeignet ( ![]() |
Re: Eine Zahl in Aussprache umwandeln...
Vielen Dank für die schnelle Antwort.
Nein die Umwandlung soll in Textform erfolgen - nicht als Sprachausgabe. |
Re: Eine Zahl in Aussprache umwandeln...
Hallo,
das, was du meinst, nennt sich "Zahlwort". In der ![]() Gruß Hawkeye |
Re: Eine Zahl in Aussprache umwandeln...
Super. Genau das, was ich gesucht habe! Danke. Ich habe das Beispiel in der Fundgrube nochmal erweitert (geht jetzt bis Billiarden (wers braucht) und neu formatiert - zum Spaß. :)
Delphi-Quellcode:
Viele Grüße!
// Original code by Georg W. Seefried
// Modified by Christian Petersen function ZahlInString( n: Int64 ): String; const Zahlen1: array[0..9] of String = ( '', 'zehn', 'zwan', 'drei', 'vier', 'fünf', 'sech', 'sieb', 'ach', 'neun' ); Zahlen: array[0..9] of String = ( '', 'ein', 'zwei', 'drei', 'vier', 'fünf', 'sechs', 'sieben', 'acht', 'neun' ); var n100, n10, n1: integer; s: String; function ZehnerUndEiner( n10, n1: byte ): String; var n: Int64; begin n := n10 * 10 + n1; Result := ''; if ( n10 = 0 ) then begin if ( n1 > 0 ) then result := result + zahlen[n1]; if ( n1 = 1 ) then result := result + 's'; end else begin if ( n10 = 1 ) then begin if ( n = 11 ) then result := result + 'elf' else if ( n = 12 ) then result := result + 'zwölf' else result := result + Zahlen1[n1] + 'zehn'; end else begin result := result + Zahlen[n1]; if ( n1 > 0 ) then result := result + 'und'; result := result + Zahlen1[n10]; if ( n10 <> 3 ) then result := result + 'zig' else result := result + 'ßig'; end; end; end; {ZehnerUndEiner} begin result := ''; if ( n = 0 ) then begin result := 'null'; exit; end; if ( n >= 1000000000000000 ) then begin s := ZahlInString( n DIV 1000000000000000 ); if ( s = 'eins' ) then result := result + 'einebilliarde' else result := result + s + 'billiarden'; n := n MOD 1000000000; end; if ( n >= 1000000000000 ) then begin s := ZahlInString( n DIV 1000000000000 ); if ( s = 'eins' ) then result := result + 'einebillion' else result := result + s + 'billionen'; n := n MOD 1000000000; end; if ( n >= 1000000000 ) then begin s := ZahlInString( n DIV 1000000000 ); if ( s = 'eins' ) then result := result + 'einemilliarde' else result := result + s + 'milliarden'; n := n MOD 1000000000; end; if ( n >= 1000000 ) then begin s := ZahlInString( n DIV 1000000 ); if ( s = 'eins' ) then result := result + 'einemillion' else result := result + s + 'millionen'; n := n MOD 1000000; end; if ( n >= 1000 ) then begin s := ZahlInString( n DIV 1000 ); if ( s = 'eins' ) then s := 'ein'; result := result + s + 'tausend'; n := n MOD 1000; end; n100 := n DIV 100; n := n MOD 100; n10 := n DIV 10; n1 := n MOD 10; if ( n100 <> 0 ) then result := result + Zahlen[n100] + 'hundert'; result := result + ZehnerUndEiner( n10, n1 ); end; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 14:47 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz