![]() |
länge zweier integer werte vergleichen
hey,
ich hab mal ne frage. also ich habe 2 variablen mit integer werten. nun möchte ich diese vergleichen und dann den kürzeren verändern. beispie Variable1 := 100 Variable 2 := 1000 dann soll er vergleichen ob variabel2 mehr zeichen beinhaltet und wenn ja vor Variable 1 so viele '0' machne, dass das gleich ist. also aus Variable1 soll dann 0100 werden. ich bekomme aber das nicht mit der hilfe vom internet hin. dacht vllt mit
Delphi-Quellcode:
repeat
Variable1 := '0' + Variable1 until ((Length(Variable1) = (Length(Variable2))) aber das klapt nicht .... hoffe ihr versteht wie ich das mein und könnt mir helfen ^^ lg ^^ |
Re: länge zweier integer werte vergleichen
Ich weiß zwar nicht, in wie fern dir das Internet dabei helfen soll, aber egal. Du willst also, die Zahl mit nullen vorne auffüllen um sie dann auszugeben. Richtig? Dann guck dir mal die
![]() |
Re: länge zweier integer werte vergleichen
Du musst die beiden Variablen in Strings wandeln und dann deren Länge vergleichen.
|
Re: länge zweier integer werte vergleichen
Brauch er nicht. Format macht das von alleine.
|
Re: länge zweier integer werte vergleichen
Und woher soll Format wissen, wie lang der längere String ist? AFAIK kann man da nur feste Längen angeben, oder hab ich was übersehen?
|
Re: länge zweier integer werte vergleichen
Das sollen sie ja auch, wenn ich das richtig verstanden habe. Man gibt fünf Stellen an und alle kürzeren wrden mit nullen aufgefüllt.
|
Re: länge zweier integer werte vergleichen
Zitat:
|
Re: länge zweier integer werte vergleichen
Werden sie ja auch:
Delphi-Quellcode:
Bei 50 ist das Ergebnis "0050" und bei 500 "0500".
procedure TForm2.Button1Click(Sender: TObject);
var i: Integer; s: String; begin i := 50; s := Format('%.4d',[i]); ShowMessage(s); end; |
Re: länge zweier integer werte vergleichen
und mit ein paar Logarithmen (oder so) könnte man auch mathematisch rausbekommen welche Zahl wie lang ist ... OK, oder über IntToStr+Length (is nur langsamer)
Delphi-Quellcode:
voll unperformat, aber es läuft:
MaxLen = {größte Länge der beiden Zahlen als String};
String1 := Format('%.*d', [MaxLen, Variable1]); STring2 := Format('%.*d', [MaxLen, Variable2]);
Delphi-Quellcode:
String1 := IntToStr(Variable1);
STring2 := IntToStr(Variable2); While Length(String1) < Length(String2) do String1 := '0' + String1; While Length(String2) < Length(String1) do String2 := '0' + String2; [add]
Delphi-Quellcode:
// einfach
MaxLen = Max(Length(IntToStr(Variable1)), Length(IntToStr(Variable2))); String1 := Format('%.*d', [MaxLen, Variable1]); String2 := Format('%.*d', [MaxLen, Variable2]); // schnell(er) Function NumLen(i: Integer): Integer; Begin If i = 0 Then Result := 1 Else If i > 0 Then Result := Trunc(Log10(Variable1)) + 1 Else Result := Trunc(Log10(-Variable1)) + 1; End; MaxLen = Max(NumLen(Variable1), NumLen(Variable2)); String1 := Format('%.*d', [MaxLen, Variable1]); String2 := Format('%.*d', [MaxLen, Variable2]); |
Re: länge zweier integer werte vergleichen
hey,
erstmal danke für eure hilfe! ich hab mir eure code angeguckt und habe festegestellt das ich bei manchen sachen keine arnung habe was die bedeuten. in disem code (ich nehm ihn weil ich denke es ist der einfachste MaxLen = Max(Length(IntToStr(Variable1)), Length(IntToStr(Variable2))); String1 := Format('%.*d', [MaxLen, Variable1]); String2 := Format('%.*d', [MaxLen, Variable2]); was bedeutet das 'max' in der ersten Zeiel ist das nen befehl oder ne variable ? und das %.*d was bedeutet das ? und meine dritte frage wird in der letzten zeile string2 nicht auch verändert ? aber es soll ja nur string 1 so mit '0' "aufgefüllt" werden das es gleichlang ist wie string 2 ... sorry fals das dumme fragen sind . lg ^^ |
Re: länge zweier integer werte vergleichen
Zitat:
Max gibt einfach den größeren der beiden Parameter zurück. Zitat:
Zitat:
Zitat:
Grüße, Yogu |
Re: länge zweier integer werte vergleichen
okay
danke |
Re: länge zweier integer werte vergleichen
hey,
ich habe jetzt diesen code genommen, bekomme aber Fehlermeldungen.
Delphi-Quellcode:
MaxLen = Max(Length(IntToStr(Variable1)), Length(IntToStr(Variable2))); // Inkompatible Typen: 'string' und 'Integer'
String1 := Format('%.*d', [MaxLen, Variable1]);// Inkompatible Typen Integer und String String2 := Format('%.*d', [MaxLen, Variable2]); // Inkompatible Typen Integer und String worand könnte das liegen bzw wie kann ich das ändern ? |
Re: länge zweier integer werte vergleichen
wie hast du denn deine Variablen definiert?
z.B.:
Delphi-Quellcode:
var String1, String2: String;
MaxLen, Variable1, Variable2: Integer; |
Re: länge zweier integer werte vergleichen
ich überprüf es eben ^^
edit hatte die varialben echt falsch definiert dafür gibs wenn ich das 'programm' ausführe nen anderen fehler nämlich : Format '%."d' ungültig oder nicht kompatibel mit Argument. toll ich weiß nicth was Delphi von mir will xD |
Re: länge zweier integer werte vergleichen
Na, für 'nen Anfänger ein wenig undurchsichtig, mit
Zitat:
|
Re: länge zweier integer werte vergleichen
aber ich will das nicht auf 4 sonder auf (length(Variable2) zeichen bringen
also auf die länge einer variable geht das auch ?! |
Re: länge zweier integer werte vergleichen
Oder so:
Delphi-Quellcode:
Ungetestet, sollte nach meinem Dafürhalten aber funktionieren.
MaxLen := Max(Length(IntToStr(Variable1)), Length(IntToStr(Variable2)));
FormatString := Format('%%.%dd',[MaxLen]); String1 := Format(FormatString, [Variable1]); String2 := Format(FormatString, [Variable2]); |
Re: länge zweier integer werte vergleichen
jetzt geht es erst
aber wenn ic hdas programm ausführe bekomme ich die meldung '%.2d' ist ungültig wobei die Zahl sich immer ändert (wenn ich das programm wieder ausführe) was ja aber eigl. auch richtig ist... |
Re: länge zweier integer werte vergleichen
Sind das auch wirklich Integerwerte, die Du übergibst?
|
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:
die OH meint zumindestens sowas:
String1 := Format('%*.*d', [0, MaxLen, Variable1])
Zitat:
|
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.
|
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:
ich hoffe ihr könnt damit was anfangen xD also Vzza und Vzzz sind die variablen die vorher "variable1" und "variable2" waren ...
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; |
Re: länge zweier integer werte vergleichen
Delphi-Quellcode:
Sinnige Variablenbezeichner sind übrigens Gold wert.
Vzza := Format(FormatString, [Va]);
Vzzz := Format(FormatString, [Vz]); |
Re: länge zweier integer werte vergleichen
Zitat:
und die ganzen Round sind "sinnlos", da es eh schon integer sind :zwinker:
Delphi-Quellcode:
obwohl ich mich frag, was bei den * falsch sein soll :gruebel:
...
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]); 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]); |
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.
|
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 ! |
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; |
Re: länge zweier integer werte vergleichen
danke
nun geht es |
Alle Zeitangaben in WEZ +1. Es ist jetzt 07:23 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