Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi FloatToStrF ?? (https://www.delphipraxis.net/30988-floattostrf.html)

Hansa 2. Okt 2004 08:30


FloatToStrF ??
 
Hi,

wieso liefert das hier :

Delphi-Quellcode:
ListBox1.Lines.Add ('Var 1 : '+FloatToStrF (1,ffFixed,8,2));
ListBox1.Lines.Add ('Var 2 : '+FloatToStrF (12,ffFixed,8,2));
ListBox1.Lines.Add ('Var 3 : '+FloatToStrF (123,ffFixed,8,2));
folgende Ausgabe:

1.00
12.00
123.00

:?:

Bzw. was ist zu tun, damit die Zahlen rechtsbündig werden ?

Sharky 2. Okt 2004 09:06

Re: FloatToStrF ??
 
Hai Hansa,

IMHO füllt FloatToStrF den String links nicht mit ' ' auf.
Mit einer kleinen Funktion sollte es aber möglich sei das selber zu machen. Hier mal etwas auf die Schnell:
Delphi-Quellcode:
function StrRight (Const str : string; size : Integer) : String;
var
  foo : String;
  ndx : Integer;
  apos : Integer;
begin
  if (Length (str) > size) then
  begin
     result := 'Fehler';
     Exit;
  end;
  apos := size;
  for ndx := 1 to size do // tmp-String füllen
  begin
    foo := foo + ' ';
  end;
  for ndx := Length(str) downto 1 do
  begin
    foo[apos] := str[ndx];
    Dec (apos);
  end;
  result := foo;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
  Memo1.Lines.Add(StrRight (Edit1.text,10));
end;

Alexander 2. Okt 2004 09:10

Re: FloatToStrF ??
 
Zitat:

Zitat von OH zu ffFixed
Festkommaformat. Der Wert wird in einen String der folgenden Form umgewandelt: "-ddd.ddd...". Der resultierende String beginnt mit einem Minuszeichen, wenn es sich um eine negative Zahl handelt. Vor dem Dezimaltrennzeichen steht immer mindestens eine Ziffer. Die Anzahl der Stellen nach dem Dezimalkomma wird über den Parameter Digits angegeben. Es muss sich dabei um eine Zahl zwischen 0 und 18 handeln. Ist die Anzahl der Stellen links vom Dezimalkomma größer als die angegebene Genauigkeit, wird für den resultierenden Wert das wissenschaftliche Format verwendet.

Danach formatiert er doch genau richtig :?

Du könntest einfach die anderen Stellen mit Leerzeichen auffüllen. Was anderes fällt mir jetzt nicht ein...

Edit: Mist zu spät...

Sharky 2. Okt 2004 09:13

Re: FloatToStrF ??
 
:wall:
Warum mache ich das eigentlich so kompliziert?
Delphi-Quellcode:
function StrRight2 (Const str : string; size : Integer) : String;
var
  foo : String;
  ndx : Integer;
begin
  if (Length (str) > size) then
  begin
     result := 'Fehler';
     Exit;
  end;
  for ndx := 1 to size - Length(str) do
  begin
    foo := foo + ' ';
  end;
  result := foo + str;
end;

Hansa 2. Okt 2004 09:43

Re: FloatToStrF ??
 
Zitat:

Zitat von Alexander
Danach formatiert er doch genau richtig :?

Was heißt schon richtig ? :shock: Das einzige was richtig ist, das sind die 2 Nachkommastellen. Und die Zahlen werden letztenendes im Kraut und Rüben - Format dargestellt. :lol:

Ihr meint also, es gibt in Delphi nicht mal Ersatz für folgendes :

Delphi-Quellcode:
writeln (r:8:2);
Nun denn, dann nehme ich vorerst eben meine eigenen Funktionen. Falls die noch jemand braucht :

Delphi-Quellcode:
function blanks (anzahl : byte) : string;
var i : integer;
    b : string;
begin
  b := '';
  for i := 1 to anzahl do
    b := b + ' ';
  blanks := b;
end;

function rb (st : string;feldweite : byte) : string;
begin
  st := Trim (st);  // eventuelle Blanks am "Rand" weglöschen
  rb := blanks (feldweite - length (st)) + st;
end;

function lb (st : string;feldweite : byte) : string;
begin
  st := Trim (st);  // eventuelle Blanks am "Rand" weglöschen
  lb := st + blanks (feldweite - length (st));
end;

Luckie 2. Okt 2004 09:47

Re: FloatToStrF ??
 
Dann versuch mal die Zahlen: 111,11 und 88,88 rechtsbündig darzustellen, wenn du eine Schriftart mit nicht gleich breiten Zeichen benutzt. Eventual sollte man sich mal die Funktion Delphi-Referenz durchsuchenFormat angucken.

Hansa 2. Okt 2004 10:09

Re: FloatToStrF ??
 
Der Einwand mit nicht proportionalen Schriftarten ist durchaus berechtigt. Ich habe das aber dadurch geregelt, daß eben z.B. Courier benutzt wird. In anderen Fällen (z.B. Stringgrid) verwende ich OnDrawCell.

Nun interessiert mich allerdings doch, wie man z.B. folgendes in einer Listbox oder einem Memo anzeigen kann mit nicht proportionalen Schriften:

Code:
Betrag :   1234,00
Anzahlung : 567,00
           --------
Diff. :     667,00
Unter folgender Voraussetzung:

1. wie man sieht links und rechtsbündig.
2. Trennstriche nur rechtsbündig und optisch größer/gleich, als die größte Zahl
3. immer 2 Nachkommastellen
4. muß im selben Stil gedruckt werden können

EDIT : Schriftart geändert :mrgreen:

alcaeus 2. Okt 2004 10:11

Re: FloatToStrF ??
 
Hi Hansa,

evtl. musst du anstatt mit Leerzeichen einen oder mehrere Tabulatorsprünge einfügen. Ob der Text im Memo bündig ausgerichtet wird wie z.B. in Word, weiß ich jetzt nicht.

Greetz
alcaeus


Alle Zeitangaben in WEZ +1. Es ist jetzt 21:52 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz