FloatToStrF() ganz strange...

Für Fehler in Lazarus, um diese von anderen verifizieren zu lassen.
Antworten
TErxleben
Beiträge: 18
Registriert: Mi 24. Mär 2010, 18:54

FloatToStrF() ganz strange...

Beitrag von TErxleben »

Folgendes Problem tritt bei mir unter KUBUNTU 11.10, Laz0.9.30-2build1, FPC 2.4.4 SVN-Revision 29738 auf:


Test1 liefert als Ergebnis korrekterweise 0.99
Test2 liefert als Ergebnis 0

Code: Alles auswählen

Test1 := F2FFNUMBER52TEST(0.99);
 Test2 := F2FFNUMBER52TEST((9.99*0.01)*10);
 
 
 
function F2FFNUMBER52TEST(fWert: Currency): String;
 Begin
  Result := FloatToStrF(fWert, ffNumber, 15, 2);
 end;
Zuletzt geändert von Lori am Do 8. Mär 2012, 17:03, insgesamt 1-mal geändert.
Grund: Highlighter

DiBo33
Beiträge: 334
Registriert: Do 11. Okt 2007, 18:01

Re: FloatToStrF() ganz strange...

Beitrag von DiBo33 »

Genauigkeit von Gleitkommazahlen
http://de.wikipedia.org/wiki/Gleitkommazahl

p.s. Test2 liefert 01.00 unter i386-gtk2

TErxleben
Beiträge: 18
Registriert: Mi 24. Mär 2010, 18:54

Re: FloatToStrF() ganz strange...

Beitrag von TErxleben »

Schon mal Danke für Deine Hilfe.

Das Test2 bei Dir 1.00 statt 0.99 liefert, liegt natürlich an Rundungsdifferenzen bei GK-Operationen. Damit hätte ich auch kein Problem.
Echt problematisch ist aber eine Rückgabe von 0 (+/-1 reicht vielleicht beim Hausbau ;-)).

So bekomme ich z.B. auch bei einem

Test3 := F2FFNUMBER52TEST(0.999);

0 geliefert. (1.00 ist mit ffNumber zu erwarten, '0.99' mit ffFixed)

Welche FPC/Lazarus-Version verwendest Du denn?

DiBo33
Beiträge: 334
Registriert: Do 11. Okt 2007, 18:01

Re: FloatToStrF() ganz strange...

Beitrag von DiBo33 »

0.9.31 SVN:35004 von 2012-02-15 FPC2.6.0 i386-linux-gtk 2

Am wichtigsten dürfte aber die FPC-Version sein.

TErxleben
Beiträge: 18
Registriert: Mi 24. Mär 2010, 18:54

Re: FloatToStrF() ganz strange...

Beitrag von TErxleben »

Na da werde ich wohl mal updaten müssen...

P.S.
nach weiteren Untersuchungen scheint der Fehler wirklich am Datentyp currency zu liegen. Da haben sich beim zig-fachen overload von FloatToStrF() offensichtlich irgendwo Fehler eingeschlichen.

Antworten