Entwickler-Ecke

Delphi Language (Object-Pascal) / CLX - StrToFloat


Dieter Hengst - Mi 26.01.11 17:31
Titel: StrToFloat
Die Anweisung:

Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
var 
  d: double;
  s: string;
begin
  d := StrToFloat('1.15');
// hier wird d leider 1.1499999999999902
  s := FloatToStrF(d,ffFixed,19,1)
end;
liefert den String s = '1.1' zurück und nicht '1.2'.


Bemerkung: d muss leider double sein und nicht extended.

Was kann ich tun?

Moderiert von user profile iconNarses: Delphi-Tags hinzugefügt


Xion - Mi 26.01.11 17:34

Hi und :welcome:

Floats sind immer etwas ungenau. Was du machen kannst wäre z.B.



Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
var
d: double;
i: integer;
s: string;
begin
d := StrToFloat('1.15');
i := round(d*100);
// hier ist i = 115
s := FloatToStr(i/100)
end;


jaenicke - Mi 26.01.11 17:50

Oder beim Aufruf von FloatToStrF statt d einfach RoundTo(d, -2) benutzen.


Dieter Hengst - Mi 26.01.11 17:53

Ich brauche leider eine allgemeine und zentrale Lösung, wie z.B. eine Modifikation von StrToFloat bzw. FloatToStrF.


jaenicke - Mi 26.01.11 18:15

Dann schreibs dir doch...

Delphi-Quelltext
1:
2:
3:
4:
5:
function FloatToStrFEx(Value: Extended; Format: TFloatFormat;
  Precision, Digits: Integer): string;
begin
  Result := FloatToStrF(RoundTo(Value, -Digits - 1), Format, Precision, Digits, FormatSettings);
end;


Xion - Mi 26.01.11 18:24

Oder wenn du meins nimmst:

Delphi-Quelltext
1:
2:
3:
4:
function DoubleToStr(Input: double): String;
begin
Result := FloatToStr( round(Input*100)/100 )
end;