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 Aus wievielen Ziffern besteht meine Ganzzahl?? (https://www.delphipraxis.net/106774-aus-wievielen-ziffern-besteht-meine-ganzzahl.html)

bingo72 16. Jan 2008 14:38


Aus wievielen Ziffern besteht meine Ganzzahl??
 
Hallo!!

Ich frag mich gerade, wie man am elegantesten die Anzahl der Stellen einer Ganzzahl ermittelt??
Ich hätt halt sonst gefühlsmässig den Integer in einen String umgewandelt und mit Length die Anzahl bestimmt??!!

Ist das so ok oder gibts was besseres??

LG
Thomas

sirius 16. Jan 2008 14:41

Re: Aus wievielen Ziffern besteht meine Ganzzahl??
 
Du kannst auch in einer Schliefe solange "div 10" machen, bis deine Zahl 0 ist. Und natürlich die Anzahl der divs zählen.

bingo72 16. Jan 2008 14:43

Re: Aus wievielen Ziffern besteht meine Ganzzahl??
 
Ok...danke!!

Kroko1999 16. Jan 2008 14:51

Re: Aus wievielen Ziffern besteht meine Ganzzahl??
 
Delphi-Quellcode:
ZiffernCount := 1+Int(Abs(ln(Ganzzahl))/ln(10));
[Edit]Formel verbessert
[Edit1] +1 hinzugefügt

PaddyL 16. Jan 2008 14:58

Re: Aus wievielen Ziffern besteht meine Ganzzahl??
 
Length(IntToStr(X)) dürfte auch gehen. Wie elegant bzw. schnell sowas ist weiß ich allerdings nicht.

tr909 16. Jan 2008 15:00

Re: Aus wievielen Ziffern besteht meine Ganzzahl??
 
Zitat:

Zitat von Kroko1999
Delphi-Quellcode:
ZiffernCount := Int(ln(Ganzzahl)/ln(10));

n1ce, aber wenn dann noch ZiffernCount := Int(ln(Ganzzahl)/ln(10))+ 1;

s-off 16. Jan 2008 15:03

Re: Aus wievielen Ziffern besteht meine Ganzzahl??
 
Zitat:

Zitat von PaddyL
Length(IntToStr(X)) dürfte auch gehen. Wie elegant bzw. schnell sowas ist weiß ich allerdings nicht.

Wer lesen kann... :mrgreen:

Auch ich würde diesen Weg gehen.

Daniel Schuhmann 16. Jan 2008 15:09

Re: Aus wievielen Ziffern besteht meine Ganzzahl??
 
Zitat:

Zitat von s-off
Auch ich würde diesen Weg gehen

Die div 10-Lösung dürfte effizienter sein.

s-off 16. Jan 2008 16:03

Re: Aus wievielen Ziffern besteht meine Ganzzahl??
 
Tatsächlich,
habe mal ein paar Messungen mit folgendem Code durchgeführt:
Delphi-Quellcode:
Function TForm1.DivMethod(_Value: Integer): Integer;
Begin
   Result := 0;

   While _Value > 0 Do Begin
      _Value := _Value Div 10;
      Inc(Result);
   End;
End;

Function TForm1.StrMethod(_Value: Integer): Integer;
Begin
   Result := Length(IntToStr(_Value));
End;
wobei ich jeweils eine zehnstellige Zahl übergeben habe.

Bei einmaligem Aufruf der beiden Funktionen ergab sich im Durchschnitt (bei 10 Testläufen) ein auf die Laufzeit bezogener Faktor von 10,29 zu Gunsten der DivMethod-Funktion.

Für den einmaligen Gebrauch ist diese also tatsächlich deutlich schneller.

Anschliessend habe ich die Funktionen 100000 mal aufrufen lassen. Hier sinkt der Faktor allerdings auf minimale 1,10 ab.

Nun meine Frage: Wie kommt das? Werden da irgendwelche Werte 'zwischengespeichert' und wiederverwendet, so dass auf Dauer gesehen die StrMethod-Methode vielleicht sogar schneller werden würde als die DivMethod-Methode?

sirius 16. Jan 2008 16:07

Re: Aus wievielen Ziffern besteht meine Ganzzahl??
 
Hast du von den Zeitwerten den Durchschnitt gebildet, hast du das Minimum genommen, wie hast du Zeit gemessen. Da kann dir einiges in die Quere kommen. Auch Krokos Variante dürfte fix sein (er sollte nur die abs(Ganzzahl) bilden)


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