Delphi-PRAXiS
Seite 3 von 3     123   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi länge zweier integer werte vergleichen (https://www.delphipraxis.net/132728-laenge-zweier-integer-werte-vergleichen.html)

himitsu 18. Apr 2009 20:33

Re: länge zweier integer werte vergleichen
 
neee, ich weiß, daß Format('%8.2d', [123]) einem Format('%*.*d', [8, 2, 123]) entspricht, daher dachte ich jetzt einfach mal, das Format('%.5d', [123]) einem Format('%.*d', [5, 123]) entspräche ... hab's aber nicht getestet :oops:

vielleicht geht ja ein :gruebel:
Delphi-Quellcode:
String1 := Format('%*.*d', [0, MaxLen, Variable1])
die OH meint zumindestens sowas:
Zitat:

Die Bezeichner für Index, Breite und Genauigkeit können direkt durch Angabe eines Strings mit dezimalen Ziffern (z.B. "%10d") oder indirekt mit Hilfe von Sternchen (z.B. "%*.*f") angegeben werden. Im letzteren Fall wird das Argument, das in der Argumentliste auf das Sternchen folgt (es muss sich dabei um einen Integerwert handeln), als tatsächlicher Wert verwendet. Beispiel:

Delphi-Quellcode:
Format('%*.*f', [8, 2, 123.456]);


DeddyH 18. Apr 2009 20:36

Re: länge zweier integer werte vergleichen
 
Meine Variante mit dem "Zwischenformat" geht jedenfalls (ich war neugierig und habe es dann selbst ausprobiert). Der Fehler muss woanders liegen.

gangs-taas 18. Apr 2009 20:54

Re: länge zweier integer werte vergleichen
 
mein quelltext

fehlersuche xD mit breakpoints komm ich auf die zeile mit "%.2d"

aber hier mein ganzer code

Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var
Vza,Vzb, Vzz : real;
a,x,c,d,b : integer;
Va, Vb, VZ: integer;
MaxLen : Integer;
Vzza, vzzz : String;
FormatString : String;
begin
a:= StrToInt(Edit2.Text[1]);
x:= StrToInt(Edit2.Text[2]);
b:= StrToInt(Edit2.Text[3]);
c:= StrToInt(Edit2.Text[4]);
d:= StrToInt(Edit2.Text[5]);
Vza := a*sqr(x) + b*x + c;
Va := (Round(Vza));
x := x+d;
Vzb := a*sqr(x) + b*x + c;
Vb := (Round(Vzb));
x := x + (26*d);
Vzz := a*sqr(x) + b*x + c;
Vz := (Round(Vz));
   MaxLen := Max(Length(IntToStr(Va)), Length(IntToStr(Vz)));
   FormatString := Format('%%.%dd',[MaxLen]);
   Vzza := Format(FormatString, [Vzza]);
   Vzzz := Format(FormatString, [Vzzz]);
Memo1.Text := 'a = ' + Vzza + #13#10 + 'B = ' + IntToStr(Vb) + #13#10 + 'Z = ' +Vzzz;
ich hoffe ihr könnt damit was anfangen xD also Vzza und Vzzz sind die variablen die vorher "variable1" und "variable2" waren ...

DeddyH 18. Apr 2009 20:59

Re: länge zweier integer werte vergleichen
 
Delphi-Quellcode:
Vzza := Format(FormatString, [Va]);
Vzzz := Format(FormatString, [Vz]);
Sinnige Variablenbezeichner sind übrigens Gold wert.

himitsu 18. Apr 2009 21:14

Re: länge zweier integer werte vergleichen
 
Zitat:

Zitat von DeddyH
Sinnige Variablenbezeichner sind übrigens Gold wert.

und wie, wobei eine hübsche Einrükung auch gut ankommt :angel:

und die ganzen Round sind "sinnlos", da es eh schon integer sind :zwinker:

Delphi-Quellcode:
...
Vz := (Round(Vz));
MaxLen := Max(Length(IntToStr(Va)), Length(IntToStr(Vz)));
FormatString := Format('a = %%.%0:dd'#13#10'B = %%d'#13#10'Z = %%.%0:dd', [MaxLen]);
Memo1.Text := Format(FormatString, [Va, Vb, Vz]);
obwohl ich mich frag, was bei den * falsch sein soll :gruebel:
denn ich hab es grad geprüft (in D7) und es gehen beide Varianten.
Delphi-Quellcode:
...
Vz := (Round(Vz));
MaxLen := Max(Length(IntToStr(Va)), Length(IntToStr(Vz)));
Memo1.Text := Format('a = %.*d'#13#10'B = %d'#13#10'Z = %.*d', [MaxLen, Va, Vb, MaxLen, Vz]);

// bzw.

...
Vz := (Round(Vz));
MaxLen := Max(Length(IntToStr(Va)), Length(IntToStr(Vz)));
Memo1.Text := Format('a = %*.*d'#13#10'B = %d'#13#10'Z = %*.*d', [0, MaxLen, Va, Vb, 0, MaxLen, Vz]);

DeddyH 18. Apr 2009 21:32

Re: länge zweier integer werte vergleichen
 
Es hat ja niemand gesagt, dass die * falsch waren. Der Fehler lag ja darin, dass er %d auf String anwenden wollte.

gangs-taas 18. Apr 2009 22:06

Re: länge zweier integer werte vergleichen
 
danke probier das lgeich aus

und zu den variablen namen die ham schon nen sinn.
aber da meine idee noch sehr wenig ausgereift ist hat's nicht viel sinn da genau jetzt schon zu beschreiben xD


danke aber für eure hilfe


edit
es klappt aber immer noch nicht.
hab das mal mit (random) zufälligen zahlen ausprobiert und dann kommt raus

a = 616
B = 2093
Z = 000


wobei ja Z eigendlich was anderes als 000 sein sollte (was es aber egal bei welcher zufälligen zahl ) ist
und a sollte ja eigendlich 0616 sein !!

also klapps nicht !

Muetze1 18. Apr 2009 22:24

Re: länge zweier integer werte vergleichen
 
Delphi-Quellcode:
var
  lLen: integer;
  s1, s2: string;
begin
  s1 := IntToStr(a);
  s2 := IntToStr(b);

  lLen := max(length(s1), length(s2));
 
  s1 := StringOfChar(' ', lLen-length(s1)) + s1;
  s2 := StringOfChar(' ', lLen-length(s2)) + s2;

  Memo1.Lines.Add(s1);
  Memo1.Lines.Add(s2);
end;

gangs-taas 19. Apr 2009 13:29

Re: länge zweier integer werte vergleichen
 
danke
nun geht es


Alle Zeitangaben in WEZ +1. Es ist jetzt 19:07 Uhr.
Seite 3 von 3     123   

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