Delphi-PRAXiS
Seite 1 von 3  1 23      

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)

gangs-taas 18. Apr 2009 11:38


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 ^^

Luckie 18. Apr 2009 11:41

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 Delphi-Referenz durchsuchenFormat Funktion an. Damit sollte das möglich ein.

DeddyH 18. Apr 2009 12:34

Re: länge zweier integer werte vergleichen
 
Du musst die beiden Variablen in Strings wandeln und dann deren Länge vergleichen.

Luckie 18. Apr 2009 14:20

Re: länge zweier integer werte vergleichen
 
Brauch er nicht. Format macht das von alleine.

DeddyH 18. Apr 2009 14:23

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?

Luckie 18. Apr 2009 14:25

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.

DeddyH 18. Apr 2009 14:27

Re: länge zweier integer werte vergleichen
 
Zitat:

Zitat von gangs-taas
dann soll er vergleichen ob variabel2 mehr zeichen beinhaltet und wenn ja vor Variable 1 so viele '0' machne, dass das gleich ist.

Ich verstehe das so, dass beide auf die gleiche (variable) Länge gebracht werden sollen.

Luckie 18. Apr 2009 14:30

Re: länge zweier integer werte vergleichen
 
Werden sie ja auch:
Delphi-Quellcode:
procedure TForm2.Button1Click(Sender: TObject);
var
  i: Integer;
  s: String;
begin
  i := 50;
  s := Format('%.4d',[i]);
  ShowMessage(s);
end;
Bei 50 ist das Ergebnis "0050" und bei 500 "0500".

himitsu 18. Apr 2009 14:41

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:
MaxLen = {größte Länge der beiden Zahlen als String};
String1 := Format('%.*d', [MaxLen, Variable1]);
STring2 := Format('%.*d', [MaxLen, Variable2]);
voll unperformat, aber es läuft:
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]);

gangs-taas 18. Apr 2009 15:12

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 ^^


Alle Zeitangaben in WEZ +1. Es ist jetzt 15:02 Uhr.
Seite 1 von 3  1 23      

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