Entwickler-Ecke

Delphi Language (Object-Pascal) / CLX - Nachkommastellen zählen


HenryHux - Mo 20.12.10 17:19
Titel: Nachkommastellen zählen
Hi,

leider nichts gefunden was mir hilft, ich versuche die Nachkommastellen einer Gleitkommazahl zu ermitteln.
Length geht ja nicht, mit frac bekomme ich auch wieder eine Nachkommazahl wieder. (Z.b frac(4.3)=0.3)
Wisst ihr da was?

Lg


gnomecoder - Mo 20.12.10 17:41

nicht getestet aber

Quelltext
1:
anzahl:= length(floattostr(zahl)) - pos(',',floattostr(zahl));                    

sollte funktionieren.


HenryHux - Mo 20.12.10 17:45

Danke, klappt, doch er zählt das Komma bzw den Punkt mit,

also

Delphi-Quelltext
1:
anzahl:= (length(floattostr(zahl)) - pos(',',floattostr(zahl))-1);                    


Lg


gnomecoder - Mo 20.12.10 17:52

Du möchtest wissen wieviele Stellen deine Zahl nach dem Komma hat?

Beispiel:
Zahl: 1234,567
length liefert 8
pos liefert 5

Ergebnis sollte 3 sein^^

Oder habe ich da was falsch verstanden? :?


HenryHux - Mo 20.12.10 18:07

Genau Ahnung davon habe ich leider nicht, habe noch nicht mit Pos gearbeitet, kann nur sagen dass es nicht so geklappt hat, wie es sollte.
So habe ich es aber hinbekommen, dass er auch bei Zahlen ohne Komma richtig ausgibt:

Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
function ZähleNachkommazahlen(zahl : Real) : Integer;
  function zählestellen(zahl : Real) : integer;
  begin
    if not (Frac(zahl) = 0then
      result:= (length(floattostr(zahl)) - pos(',',floattostr(zahl))-1)
    else Result := Length(FloatToStr(zahl));
  end;
begin
  Result := zählestellen(zahl)-length(IntToStr(trunc(zahl)));
end;


Lg


elundril - Mo 20.12.10 18:36

warum nutzt du nicht length in zusammenhang mit frac und ziehst 2 ab? (zwei wegen der 0 und dem Komma)

lg elundril


Delete - Di 21.12.10 20:34

- Nachträglich durch die Entwickler-Ecke gelöscht -


delfiphan - Di 21.12.10 21:07

Keine gute Idee. "," ist abhängig von den Systemeinstellungen; ein Float kann auf verschiedene Arten dargestellt sein (z.B. 1,3e8); und die korrekte Anzahl Stellen ist nicht unbedingt ermittelbar, z. B. bei irrationalen Zahlen oder rationalen Zahlen mit periodischem Dezimalbruch.

Wofür musst du diese Angabe haben? Die Zahl ist total spezifisch für das Dezimalsystem. Wenn es darum geht, die Ausgabe zu formattieren, dann kannst du direkt Format dafür verwenden.