Autor Beitrag
Dieter Hengst
Hält's aus hier
Beiträge: 2



BeitragVerfasst: Mi 26.01.11 17:31 
Die Anweisung:
ausblenden 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
EE-Maler
Beiträge: 1952
Erhaltene Danke: 128

Windows XP
Delphi (2005, SmartInspect), SQL, Lua, Java (Eclipse), C++ (Visual Studio 2010, Qt Creator), Python (Blender), Prolog (SWIProlog), Haskell (ghci)
BeitragVerfasst: Mi 26.01.11 17:34 
Hi und :welcome:

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


ausblenden 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;

_________________
a broken heart is like a broken window - it'll never heal
In einem gut regierten Land ist Armut eine Schande, in einem schlecht regierten Reichtum. (Konfuzius)

Für diesen Beitrag haben gedankt: Dieter Hengst
jaenicke
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19346
Erhaltene Danke: 1754

W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Mi 26.01.11 17:50 
Oder beim Aufruf von FloatToStrF statt d einfach RoundTo(d, -2) benutzen.

Für diesen Beitrag haben gedankt: Dieter Hengst
Dieter Hengst Threadstarter
Hält's aus hier
Beiträge: 2



BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 19346
Erhaltene Danke: 1754

W11 x64 (Chrome, Edge)
Delphi 12 Pro, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
BeitragVerfasst: Mi 26.01.11 18:15 
Dann schreibs dir doch...
ausblenden 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;

Für diesen Beitrag haben gedankt: Dieter Hengst
Xion
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
EE-Maler
Beiträge: 1952
Erhaltene Danke: 128

Windows XP
Delphi (2005, SmartInspect), SQL, Lua, Java (Eclipse), C++ (Visual Studio 2010, Qt Creator), Python (Blender), Prolog (SWIProlog), Haskell (ghci)
BeitragVerfasst: Mi 26.01.11 18:24 
Oder wenn du meins nimmst:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
function DoubleToStr(Input: double): String;
begin
Result := FloatToStr( round(Input*100)/100 )
end;

_________________
a broken heart is like a broken window - it'll never heal
In einem gut regierten Land ist Armut eine Schande, in einem schlecht regierten Reichtum. (Konfuzius)

Für diesen Beitrag haben gedankt: Dieter Hengst