AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein Anzahl der Vorkommastellen bestimmen ???
Thema durchsuchen
Ansicht
Themen-Optionen

Anzahl der Vorkommastellen bestimmen ???

Ein Thema von Cliff · begonnen am 23. Sep 2004 · letzter Beitrag vom 4. Okt 2020
Antwort Antwort
Seite 1 von 2  1 2      
Cliff

Registriert seit: 3. Feb 2004
22 Beiträge
 
#1

Anzahl der Vorkommastellen bestimmen ???

  Alt 23. Sep 2004, 19:42
Hi,
ich habe da im Moment eine Blockade
Ich suche einen einigermassen Effizienten Algorithmus mit dem ich die Anzahl der Vorkommastellen eines Reals bestimmen kann (Beispiel: 123,456 entspricht '3').
Kann mir da jemand auf die Sprünge helfen?

Gruss Cliff
  Mit Zitat antworten Zitat
Benutzerbild von r_kerber
r_kerber

Registriert seit: 11. Feb 2003
Ort: Trittau
3.538 Beiträge
 
Delphi XE Professional
 
#2

Re: Anzahl der Vorkommastellen bestimmen ???

  Alt 23. Sep 2004, 19:50
Moin Cliff,

wie wäre es mit dem Logarithmus zur Basis 10?
  Mit Zitat antworten Zitat
CT86

Registriert seit: 24. Aug 2004
Ort: Wo immer mein PC steht
21 Beiträge
 
Delphi 7 Enterprise
 
#3

Re: Anzahl der Vorkommastellen bestimmen ???

  Alt 23. Sep 2004, 19:51
Hey,
so müsste es gehen
Delphi-Quellcode:
var
  v: Integer;
  s: String;
begin
  v := 14234.43245;
  Str(v:6:2, s); // die 6 steht für die Vorkommastellen
  Edit.Text := s;
end;
Hoffe es hilft dir weiter
mfg
CT86
Wenige Menschen denken, und doch wollen alle entscheiden.
  Mit Zitat antworten Zitat
Benutzerbild von d3g
d3g

Registriert seit: 21. Jun 2002
602 Beiträge
 
#4

Re: Anzahl der Vorkommastellen bestimmen ???

  Alt 23. Sep 2004, 19:52
Trunc(Log10(n) + 1). Achte auf negative Werte.

[edit]Vieeel zu langsam...[/edit]
-- Crucifixion?
-- Yes.
-- Good. Out of the door, line on the left, one cross each.
  Mit Zitat antworten Zitat
Chewie

Registriert seit: 10. Jun 2002
Ort: Deidesheim
2.886 Beiträge
 
Turbo Delphi für Win32
 
#5

Re: Anzahl der Vorkommastellen bestimmen ???

  Alt 23. Sep 2004, 19:52
Ich würde auch dir Variante mit dem Zehner-Logarithmus empfehlen, da die AFAIK auf Intel-Rechner als Hardware-Variante zur Verfügung steht.
Martin Leim
Egal wie dumm man selbst ist, es gibt immer andere, die noch dümmer sind
  Mit Zitat antworten Zitat
Benutzerbild von MisterNiceGuy
MisterNiceGuy

Registriert seit: 1. Jul 2003
Ort: Mannheim
919 Beiträge
 
Delphi 7 Personal
 
#6

Re: Anzahl der Vorkommastellen bestimmen ???

  Alt 23. Sep 2004, 20:31
Delphi-Quellcode:
function Vorkommastellen(Zahl:Real):integer;
var I, erg:integer;
    hlp:string;
begin
  erg := 0;
  hlp := floattostr(Zahl);
    for i:=1 to length(hlp) do
      begin
        if hlp[i] <> ',//Oder Punkt, je nachdem wie du trennst
          then
            erg := erg+1
          else break;
      end;
result := erg;
end;
Ist jetzt nicht getestet, hoffe er funktioniert
Jonas
Wenn mich jemand sucht, ich bin im Kühlschrank!

Informationen über das Duale Studium
www.jofre.de
  Mit Zitat antworten Zitat
Benutzerbild von Ultimator
Ultimator

Registriert seit: 17. Feb 2004
Ort: Coburg
1.860 Beiträge
 
FreePascal / Lazarus
 
#7

Re: Anzahl der Vorkommastellen bestimmen ???

  Alt 23. Sep 2004, 20:43
Geht nicht einfach
pos(',',floattostr(123,456))+1;
Julian J. Pracht
  Mit Zitat antworten Zitat
Cliff

Registriert seit: 3. Feb 2004
22 Beiträge
 
#8

Re: Anzahl der Vorkommastellen bestimmen ???

  Alt 23. Sep 2004, 20:50
Wow, was für eine Reaktion
big THX!

Ich dachte mir schon das ich irgendwie mit dem Logarithmus weiterkomme, aber irgendwie hat es gehakt. An die Variante mit den Strings wollte ich zunächst nicht 'ran, da ich dachte das es da evtl. noch eine geschicktere Möglichkeit gibt.
Werde wohl einmal beide Möglichkeiten in eine Schleife schicken und schauen welche auf meinem PC die geeignetere ist...

Danke nochmal!

Gruss Cliff
  Mit Zitat antworten Zitat
Benmik

Registriert seit: 11. Apr 2009
557 Beiträge
 
Delphi 12 Athens
 
#9

AW: Re: Anzahl der Vorkommastellen bestimmen ???

  Alt 3. Okt 2020, 13: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
Benutzerbild von Gausi
Gausi

Registriert seit: 17. Jul 2005
880 Beiträge
 
Delphi 11 Alexandria
 
#10

AW: Anzahl der Vorkommastellen bestimmen ???

  Alt 4. Okt 2020, 15:13
Ich denke, dass das Edit "Viel zu langsam" vor 16 Jahren so gemeint war, das ganze zwei Minuten vorher die Antwort mit dem Logarithmus auch schon gegeben wurde, was aber erst nach dem Absenden der Antwort bemerkt wurde.
The angels have the phone box.
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 23:37 Uhr.
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