Процедуры внутреннего формата с плавающей запятой работают только с простыми числами> 1
Вам нужно сделать что-то более сложное для ограничителя десятичного разряда общего назначения, который правильно работает как с фиксированной точкой, так и со значениями <1 с научной нотацией.</p>
Я использую эту процедуру
function TForm1.Flt2str(Avalue:double; ADigits:integer):string;
var v:double; p:integer; e:string;
begin
if abs(Avalue)<1 then
begin
result:=floatTostr(Avalue);
p:=pos('E',result);
if p>0 then
begin
e:=copy(result,p,length(result));
setlength(result,p-1);
v:=RoundTo(StrToFloat(result),-Adigits);
result:=FloatToStr(v)+e;
end else
result:=FloatToStr(RoundTo(Avalue,-Adigits));
end
else
result:=FloatToStr(RoundTo(Avalue,-Adigits));
end;
Итак, с цифрами = 2, 1,2349 раундов до 1,23 и 1,2349E-17 раундов до 1,23E-17