Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Zahl in Worten ausgeben (https://www.delphipraxis.net/175298-zahl-worten-ausgeben.html)

blondervolker 11. Jun 2013 14:47

Zahl in Worten ausgeben
 
Liste der Anhänge anzeigen (Anzahl: 1)
Hallo,
habe eine Unit im Forum gefunden,die man "nur"mit einbinden muss.
Hab ich gemacht.Nur komme ich mit dem Code nicht klar.:oops:
Es sollen nur Zahlen eingegeben werden im Edit1 und Edit2 soll die Zahl
als Wort dagestellt werden.
Ich bekomm es einfach nicht hin.Hab das "Projekt" mal mit drangehangen.
Ich bin ein Laie und noch am üben.

Aviator 11. Jun 2013 15:01

AW: Zahl in Worten ausgeben
 
Wenn ich den Code in der Unit richtig verstehe, musst du nur die
Delphi-Quellcode:
function GetShortName(Zahl: Integer; Tousand: Boolean;
    Last: Boolean = False): string;
aufrufen. Der Kommentar zur Function lautet:
Zitat:

(**
* Gibt den Zahlenname für Zahlen kleiner Tausend aus.
*
* Zahl - Die Zahl die konvertiert werden soll.
* Tousand - Wenn True, wird 1 als 'ein' ausgegeben, sonst als 'eine' (man
* sagt "eine Million/Milliarde", aber "ein Tausend").
*)
Du musst eben nur noch wissen, wann du als zweiten Parameter true und wann false übergibst.

Der schöne Günther 11. Jun 2013 15:03

AW: Zahl in Worten ausgeben
 
Und wenn ich es von eben kurz drüberschauen richtig in Erinnerung habe, wird gerade diese Funktion komischerweise nicht aus der Unit exportiert. Oben im interface-Teil fehlt also die Deklaration.

Aviator 11. Jun 2013 15:09

AW: Zahl in Worten ausgeben
 
Hmm da hast du Recht. Aber alle anderen Funktionen ergeben keinen wirklichen Sinn. Die "BuildList-Function" gibt nur TStrings zurück. Man müsste sich die Zahl also selbst zusammenesetzen. Meiner Meinung nach hat der "Codeschreiber" vergessen, diese Function aufzunehmen, sprich zu veröffentlichen. Ich würde sie einfach mal dazuschreiben (sie wird nämlich nur von der BuildList-Function aufgerufen) und diese mal ausführen und kucken was zurückgegeben wird.

Ginko 11. Jun 2013 15:12

AW: Zahl in Worten ausgeben
 
Delphi-Quellcode:
(**
* Konvertiert einen String mit der Zahl in Ziffern, in einen String mit der
* ausgeschrieben Zahl.
*
* Input - Die Zahl in Ziffern.
*)
function ConvertString(const Input: string): string; // Public
sollte die richtige Funktion sein. Steht auch im interface...

Delphi-Quellcode:
uses ... NumUnit ...;    
 
procedure TForm1.Button1Click(Sender: TObject);
var
  inputZif: String;
begin
  inputZif:= Edit1.Text;
  Edit2.Text:= ConvertString(inputZif);
end;
Klappt bei mir auch unter Lazarus, nur ab den Tausendern schreibt er noch null dazu komischerweise...

Mfg

Aviator 11. Jun 2013 15:16

AW: Zahl in Worten ausgeben
 
:oops: total übersehen. Aber auch nur im Notepad (nichtmal Notepad++) angeschaut. Das ist dann kein Wunder.
ConvertString sieht zumindest vom Aufbau her ziemlich danach aus.

Ginko 11. Jun 2013 15:22

AW: Zahl in Worten ausgeben
 
Ja der Aufbau hat mich auch erst etwas verwirrt und ich dachte auch erst es wäre Short. Aber Short ist eigentlich eine Funktion von GetShortName.

Mathematiker 11. Jun 2013 15:30

AW: Zahl in Worten ausgeben
 
Hallo,
so geht es:
Delphi-Quellcode:
var zahl:tbignum;
    zahlstring:string;
    i:integer;
begin
    zahlstring:='12345678901234567890'; // zum Beispiel
    setlength(zahl,length(zahlstring));
    for i:=1 to length(zahlstring) do
      zahl[i-1]:=ord(zahlstring[i])-48;
    listbox1.items:=BuildList(zahl,false,true); //irgendein tstrings
    setlength(zahl,0);
end;
Beste Grüße
Mathematiker

Ginko 11. Jun 2013 15:52

AW: Zahl in Worten ausgeben
 
Zitat:

Zitat von Mathematiker (Beitrag 1218249)
Hallo,
so geht es:
Delphi-Quellcode:
var zahl:tbignum;
    zahlstring:string;
    i:integer;
begin
    zahlstring:='12345678901234567890'; // zum Beispiel
    setlength(zahl,length(zahlstring));
    for i:=1 to length(zahlstring) do
      zahl[i-1]:=ord(zahlstring[i])-48;
    listbox1.items:=BuildList(zahl,false,true); //irgendein tstrings
    setlength(zahl,0);
end;

Naja bei der Variante fehlt aber noch die 890 zum Schluss als Wort(aber wahrscheinlich ist das Absicht, würde sich ja blöd anhören...). Es ist eher eine Semi-Wort Variante würde ich sagen. Und blondervolker hat nichts von einer Listendarstellung gesagt. Aber auch interessant.

Mfg

Ginko 11. Jun 2013 16:15

AW: Zahl in Worten ausgeben
 
Hier mal beide Versionen im Vergleich (Zahl: 12345678901234567890):

function BuildList...:
Code:
12 Trillionen
345 Billiarden
678 Billionen
901 Milliarden
234 Millionen
567 Tausend
890
function ConvertString...:
Code:
zwölf Trillionen dreihundertfünfundvierzig Billiarden sechshundertachtundsiebzig Billionen neunhunderteins Milliarden zweihundertvierunddreißig Millionen fünfhundertsiebenundsechzig Tausend achthundertneunzig
Weiß jemand wie man das null wegbekommt zB wenn man 1000 als Wort ausgibt:
Code:
ein Tausend null

Bjoerk 11. Jun 2013 16:36

AW: Zahl in Worten ausgeben
 
Null ist ein Result von GetShortName. Denke mal daß man das '' setzen kann, kann es aber momentan nicht genau überblicken.

Edit: Besser am Ende der BuildList

Delphi-Quellcode:
    for I := Result.Count - 1 downto 0 do
      if Pos('null', Result[I]) > 0 then
        Result.Delete(I);

blondervolker 11. Jun 2013 16:44

AW: Zahl in Worten ausgeben
 
Ja erstmal DANKE!!!
Aber ich weiss jetzt genausoviel wie vorher.Ich hab`s noch nicht gefressen.:stupid:
Kann vielleicht jemand dieses Beispiel deklarieren oder "umvögeln" mit Edit1,2 oder Button1 Klick als Wort oder Text anzeigen?
Da geht es eher in die Birne(jedenfalls in meine:-D).

Ginko 11. Jun 2013 17:27

AW: Zahl in Worten ausgeben
 
@Bjoerk ja stimmt so könnte man es machen.
Die Listenansicht wäre ja für große Zahlen auf jedenfall sinnvoller, man könnte sie auch mit der ConvertString Version kombinieren.

Aber zurück zum eigentlichen Problem, ich poste mal die ganze Unit (sollte so unter Delphi problemlos Compilieren), dann müsste es aber eigentlich klar sein, oder ich habe das Problem nicht verstanden...

Delphi-Quellcode:
unit Unit1;

interface

uses
  Classes, SysUtils, Forms, Controls, Graphics, Dialogs, StdCtrls, NumUnit; //Wichtig ! NumUnit hier eifügen

type
  { TForm1 }

  TForm1 = class(TForm)
    Button1: TButton;
    Edit1: TEdit;
    Edit2: TEdit;
    procedure Button1Click(Sender: TObject);
  private
    { private declarations }
  public
    { public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

{ TForm1 }

procedure TForm1.Button1Click(Sender: TObject);
var
  EingabeAlsZiffer: String;
begin
  EingabeAlsZiffer:= Edit1.Text; //Einlesen der Zahl als Ziffer
  Edit2.Text:= ConvertString(EingabeAlsZiffer); //Konvertierung und Ausgabe der Ziffer als Wort in Edit2
end;

end.
Ich habe ein neues Projekt erstellt und die Datei NumUnit.pas aus deinem Anhang in den Ordner (des neuen Projektes) kopiert.

blondervolker 11. Jun 2013 18:21

AW: Zahl in Worten ausgeben
 
Einwandfrei.Dankeschööööön!!!:thumb:

blondervolker 12. Jun 2013 21:45

AW: Zahl in Worten ausgeben
 
Geht es auch mit Nachkommastellen?

30 von Hundert?:-D usw.

Amateurprofi 13. Jun 2013 00:08

AW: Zahl in Worten ausgeben
 
Liste der Anhänge anzeigen (Anzahl: 1)
Ich habe mich gestern und heute auch mal mit dem Thema befasst.
Im Anhang eine .exe und die Unit, in der die Umwandlung stattfindet als.pas
Hoffentlich nicht so viel Bugs...

Medium 13. Jun 2013 00:11

AW: Zahl in Worten ausgeben
 
30 von Hundert? Was ist das für eine Angabe?

Egal: Du könntest für Nachkommastellen deinen Zahl-String einfach am Komma in zwei Teile splitten, den linken durch die hier erarbeitete Funktion jagen, und den rechten (Nachkommaanteil) ziffernweise in Zahlwörter umwandeln und einfach an den Ergebnisstring hinten dran pappen.

blondervolker 13. Jun 2013 09:12

AW: Zahl in Worten ausgeben
 
Hallo,
ich hatte mich verkehrt ausgedrückt mit 30 von hundert(Alzheimer):-D.
Ich wollte nur mitteilen,wie man auch die Nachkommastellen als Text angezeigt bekommt.
Zum Beispiel 12,89 zwölfeuroneunundachtzig

und nicht eintausendzweihundertneunundachtzig.

Jumpy 13. Jun 2013 09:49

AW: Zahl in Worten ausgeben
 
Zitat:

Zitat von blondervolker (Beitrag 1218443)
Hallo,
Zum Beispiel 12,89 zwölfeuroneunundachtzig

Das ist aber eine ganz andere Anforderung nämlich: Euro-Beträge in Worten ausgeben oder so ähnlich.

In Mathesprech ist das aber zwölfkommaachtneun oder sowas wie Medium das meinte

Ginko 13. Jun 2013 13:00

AW: Zahl in Worten ausgeben
 
Liste der Anhänge anzeigen (Anzahl: 1)
Die angefügte Unit mit dem Beispiel macht genau das:
Code:
12,89 -> zwölfeuroneunundachtzig
Dazu habe ich hier diese Funktion genommen http://www.delphi-fundgrube.de/faq13.htm, und eine kleine Änderung gemacht. Außerdem habe ich noch 2 Funktionen, um den String in Cent und Euro zu trennen und entsprechend auszugeben, geschrieben.

Ich habe mal alles Zusammen im Anhang in einer Unit. Sollte in Delphi Compilieren.

Die Dateien aus dem ursprünglichen Anhang sind dafür nicht nötig.

MfG

Ginko 13. Jun 2013 14:01

AW: Zahl in Worten ausgeben
 
Liste der Anhänge anzeigen (Anzahl: 2)
@AmateurProfi, hattest du selbst eine Umwandlungsfunktion geschrieben ?
Weil in deinem Anhang konnte ich nur die Datei aus dem ursprünglichen Anhang von blondervolker finden ?

Ich habe die Funktionen von meinem letzen Beitrag mal zur besseren Übersicht in eine extra Unit gepackt.
Hier nochmal beides.

Unit1 ist ein Beispiel für den Aufruf.

Mfg


Alle Zeitangaben in WEZ +1. Es ist jetzt 03:50 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