Einzelnen Beitrag anzeigen

Benmik

Registriert seit: 11. Apr 2009
542 Beiträge
 
Delphi 11 Alexandria
 
#9

AW: Re: Anzahl der Vorkommastellen bestimmen ???

  Alt 3. Okt 2020, 12:36
Trunc(Log10(n) + 1). Achte auf negative Werte.
[edit]Vieeel zu langsam...[/edit]
Aus gegebenem Anlass habe ich dieses Thema exhumiert. Vielleicht gibt es ja inzwischen bessere Ansätze, aber "Viel zu langsam" kann ich nicht nachvollziehen:
Delphi-Quellcode:
procedure TestCode;
var Dbl1,Dbl2:Double;
    i,Bis:integer;
    StopWatch:TStopWatch;
begin
  Dbl2 := 654321.123456;
  StopWatch := TStopWatch.StartNew;
  Bis := Min(100000000,High(integer));
  For i := 0 to Bis do begin
    Dbl1 := Floor(1 + Log10(Abs(Dbl2)));
// Dbl1 := Pos(',',FloatToStr(Dbl2)) + 1;
  end;
  StopWatch.Stop;
  ShowMessage(Format('%d %s%.0n %s%0.7n7 %s', [StopWatch.ElapsedMilliseconds,'msec (',Bis/1,'Dateien)' + NZ,StopWatch.ElapsedMilliseconds/Bis,'msec je Durchlauf']));
  Application.Terminate;
end;
100 Millionen Durchläufe dauern auf meinem Rechner ca. 1,7 Sekunden, das sind etwa 17,3 Nanosekunden je Berechnung. Ohne das Abs ist es noch eine Nanosekunde weniger. Die Stringlösung dauert etwa 15 Mal länger.
  Mit Zitat antworten Zitat