{ test by Graeme Geldenhuys } {$mode delphi} uses sysutils; procedure test; var Result: string; e: extended; r: double; begin DecimalSeparator:='.'; e := 234.502; Result := FloatToStrF(e, ffGeneral, 15, 0); // Memo1.Lines.Add(Result); { prints 234.502 } writeln(result); if (result <> '234.502') then halt(1); r := 234.502; Result := FloatToStrF(r, ffGeneral, 15, 0); // Memo1.Lines.Add(Result); { prints 234.50200000000001 } writeln(result); if (result <> '234.502') then halt(1); r := 234.501; Result := FloatToStrF(r, ffGeneral, 15, 0); // Memo1.Lines.Add(Result); { prints 234.501 Why does this work? } writeln(result); if (result <> '234.501') then halt(1); r := 7.502; Result := FloatToStrF(r, ffGeneral, 15, 0); // Memo1.Lines.Add(Result); { prints 7.502 } writeln(result); if (result <> '7.502') then halt(1); r := 8.502; Result := FloatToStrF(r, ffGeneral, 15, 0); // Memo1.Lines.Add(Result); { prints 8.502000000000001 } writeln(result); if (result <> '8.502') then halt(1); e:=0.005; str(e:0:2,result); writeln(result); if (result<>'0.01') then halt(1); end; begin test; end.