Autor Beitrag
goog
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 37



BeitragVerfasst: So 13.03.05 14:49 
Hi Leute

Ich will in einem Panel eine Zahl ausgeben lassen.
Also FloattoStr(0,2) müsste eigentlich einen String von '0,2' liefern, aber es erscheint 0,2000000000046 :?
Wie kann ich das beheben :?:

gruß goog
retnyg
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 2754

SNES, GB, GBA, CPC, A500, 486/66, P4/3.0HT: NintendOS, AmigaOS, DoS
Delphi 5, Delphi 7
BeitragVerfasst: So 13.03.05 14:56 
guck dir mal den befehl roundto an, gibt sicher noch einige ähnliche befehle die auch helfen würden

_________________
es gibt leute, die sind genetisch nicht zum programmieren geschaffen.
in der regel haben diese leute die regel...
Sprint
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 849



BeitragVerfasst: So 13.03.05 15:09 
goog hat folgendes geschrieben:
Also FloattoStr(0,2) müsste eigentlich einen String von '0,2' liefern, aber es erscheint 0,2000000000046
Wie kann ich das beheben

Wenn du mit Double arbeitest, dann sollte das eigentlich nicht passieren. Bei Single könnte ich mir das vorstellen.

_________________
Ciao, Sprint.
Radioactive
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 179

Win 98, Win XP Home SP2
D3 Prof, D7 Pers, D2005 Pers
BeitragVerfasst: So 13.03.05 15:11 
OK, wir haben eine Lösung, aber keine Erklärung. Mir passiert das auch manchmal und ich würde gerne wissen, woran das liegt und wie man es verhindern kann.

_________________
Radioactive
"Wer scrollt, verliert!" Matthias Stein, Informatiklehrer am GG
delfiphan
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2684
Erhaltene Danke: 32



BeitragVerfasst: So 13.03.05 15:14 
Erklärung: 0,2 lässt sich im Binärsystem nicht exakt darstellen. "0,2" im Dezimalsystem entspricht "0,001100110011001100..." im Binärsystem.
UC-Chewie
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 531

WinXP
D5 Ent
BeitragVerfasst: So 13.03.05 17:20 
Erklärungen gibts hier, in der Dp und ansonsten bei Google zuhauf. Such mal nach "IEEE 754".

_________________
Egal wie dumm man selbst ist, es gibt immer andere, die noch dümmer sind
Popov
ontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic starofftopic star
Beiträge: 1655
Erhaltene Danke: 13

WinXP Prof.
Bei Kleinigkeiten D3Pro, bei größeren Sachen D6Pro oder D7
BeitragVerfasst: So 13.03.05 17:44 
Also das

ausblenden Delphi-Quelltext
1:
FloattoStr(0,2)					


kann schon mal nicht funktionieren. Du hast uns irgendwas aufgeschrieben und somit falsche Daten gegeben. Das Komma (,) ist kein Dezimaltrennzeichen. Also kann dein Beispiel schon mal nicht funktionieren. Somit hast du alle hier auf die falsche Richtung geschickt. Selber schuld wenn du nicht so schnell eine passende Antwort kriegst. Lern in Zukunft alles genau aufzuschreiben.

Du hast noch eine ältere Version von Delphi. Ich schätze D3 oder D4. Variablentyp Real ist dort wirklich noch Rel. Und der ist nicht optimal für aktuelle Systeme. Was du hast ist wahrscheinlich so was:

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
var
  a: Real;
begin
  a := 0.2;
  … FloatToStr(a)…


Das ergibt die ungenaue Zahl.

Hättest du von Anfang an alle Daten geliefert, dann hättest du schon längst die richtige Antwort. Obwohl ich die vorherigen Antworten nicht als falsch bezeichnen will. Nur hast du vergessen zu sagen, daß du hier eine Variable unterschlagen hast.

Was du nehmen kannst ist zum Beispiel Double:

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
var
  a: Double;
begin
  a := 0.2;
  … FloatToStr(a)…


Das ergibt wieder eine 0,2.

Wenn du aber bereits D6 hast, dann ist es wieder egal ob du Real nimmst. Dort ist Real = Double.

_________________
Popov