Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Общие вопросы > Не получаеться задать формат дробному числу


Автор: Rodeon 5.4.2012, 02:35
Имееться текстовый файл следующего содержания:
 1    547.50    550.10    2.60   4.371   0.000
 2    552.30    555.30    3.00   5.535   0.000
 3    556.50    563.30    6.80   2.916   0.000
 4    565.30    569.90    4.60   2.805   0.000
 5    573.30    575.70    2.40   5.117   0.000
 6    576.50    582.50    6.00   7.279   0.000
 7    583.70    587.50    3.80   3.979   0.000
 8    588.30    593.10    4.80   5.371   0.000
 9    594.30    597.30    3.00   6.099   0.000
10    599.70    602.50    2.80   4.288   0.000
11    606.10    610.30    4.20   6.245   0.000
12    613.30    623.30   10.00   6.390   0.000
13    626.10    636.90   10.80   7.006   0.000
14    638.70    641.30    2.60   6.465   0.000
15    646.70    648.90    2.20   3.647   0.000
16    650.50    661.30   10.80   3.372   0.000
17    663.70    673.10    9.40   4.189   0.000
18    676.70    683.90    7.20   3.169   0.000

Считываю его так:
Код

procedure TForm1.sBitBtn1Click(Sender: TObject);
var
  tempstring:string;
  f : TStringList;
  Nums,i:integer;
  n1: Integer;
  n2, n3, n4, n5, n6 : Single;
begin
  If sOpenDialog1.Execute then
  Begin
    f := TStringList.Create();
    f.LoadFromFile(sOpenDialog1.FileName);
    Nums:=F.Count;
    AssignFile(IntervalFile, sOpenDialog1.FileName);
    Reset(IntervalFile);
    For i:=1 to Nums do
    begin
      ReadLn(IntervalFile, n1, n2, n3,n4,n5,n6);
      FormatFloat('0,00',n2);
      memo1.Lines.Add(floattostr(n2)+' '+floattostr(N3));
    End;
  End;
end;

Так как важны только 2-е и 3-е значения вывожу их в мемо, но откуда такие значения, такая точность?
547,5 550,099975585938
552,299987792969 555,299987792969
556,5 563,299987792969
565,299987792969 569,900024414063
573,299987792969 575,700012207031
576,5 582,5
583,700012207031 587,5
588,299987792969 593,099975585938
594,299987792969 597,299987792969
599,700012207031 602,5
606,099975585938 610,299987792969
613,299987792969 623,299987792969
626,099975585938 636,900024414063
638,700012207031 641,299987792969
646,700012207031 648,900024414063
650,5 661,299987792969
663,700012207031 673,099975585938
676,700012207031 683,900024414063
688,099975585938 691,5
766,900024414063 771,900024414063
Колличество знаков после запятой откуда?

Меняю тип переменных   n2, n3, n4, n5, n6 на Extended; 
Становиться лучше, но теперь не хватает колличества знаков, должно быть 2 знака после запятой.
547,5 550,1
552,3 555,3
556,5 563,3
565,3 569,9
573,3 575,7
576,5 582,5
583,7 587,5
588,3 593,1
594,3 597,3
599,7 602,5
606,1 610,3
613,3 623,3
626,1 636,9
638,7 641,3

И в первом и во втором случае FormatFloat не помогает.



Автор: kami 5.4.2012, 06:51
http://delphikingdom.ru/asp/viewitem.asp?catalogid=374.
Читать главу "Примеры «неправильного» поведения вещественных типов"

Автор: Rodeon 5.4.2012, 09:51
Спасибо, почитал!
Оставил тип Extended пока!
Осталось 3 вопроса:
1. Если у меня при типе Extended числа отображаються с 1 знаком после запятой, будет ли так-же на другой машине?
2. После загрузки этих данных, я потом произвожу поиск на соответствие в другом файле, т.е. береться первое число и ишеться первое вхождение в другом файле данных, не будет ли проблемм с этим в будущем, а то если судить по вот этому примеру:
Код

var R:Single;
 begin
  R:=0.1;
  if R=0.1 then
   Label1.Caption:='Равно'

  else
   Label1.Caption:='Не равно'
 end;

у меня как раз не получиться найти ничего.
3. Как с этим бороться, мне надо что бы и отображалось и компьютер правильно сравнивал значения, например загрузил от такое 573,30, но отображает его как 573,29998779296
в другом файле тоже есть значение 573.30, но я так понимаю он его не найдет?

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)