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


Автор: anr0ID 4.4.2011, 01:11
Дело в следующем: когда считаются погрешности и переводятся в строку числа странные получаются. 
Например: 1,99-1,96 получается результат 0,02999999999. Я понимаю, что юзать FloatToStr и StrToFloat в рассчётах - это моветон, но другого выхода не знаю. 
И проверка погрешностей не осуществляется, вроде смотрел, чему равны переменные, вводил их значение, но все равно говорит, что неправильно.
Код

procedure TForm6.Button1Click(Sender: TObject);
var
   volt1,volt2,volt3,volt4,volt5        :real; //переменные для StrGrid1
   pog1,pog2,pog3,pog4,pog5     :real; //расчет погрешности
   aa1, aa2, aa3,aa4,aa5 :real; //для расчета Д
   aSHk2                 :real; //эталонные значения
   aSHk3                 :real; //------------------
 
 
 
begin
 aSHk2 := 1.99;
 aSHk3 := 2;
 
   volt1 := StrToFloat (StringGrid1.Cells [1,1]);// ----------------------------------
   volt2 := StrToFloat (StringGrid1.Cells [1,2]);//
   volt3 := StrToFloat (StringGrid1.Cells [1,3]);//ввод значений в поле для погрешностей
   volt4 := StrToFloat (StringGrid1.Cells [1,4]);//
   volt5 := StrToFloat (StringGrid1.Cells [1,5]);//------------------------------------
 
   aa1:= StrToFloat (StringGrid2.Cells [1,1]);
   aa2:= StrToFloat (StringGrid2.Cells [1,2]);
   aa3:= StrToFloat (StringGrid2.Cells [1,3]);
   aa4:= StrToFloat (StringGrid2.Cells [1,4]);
   aa5:= StrToFloat (StringGrid2.Cells [1,5]);
 
//расчет погрешностей
   if (sTT1>aSHk2) then
      pog2:=sTT1-aSHk2
      else
     pog2:= aSHk2-sTT1;
 
    if (sP323>aSHk3) then
      pog3:=sP323-aSHk3
      else
      pog3:=aSHk3-sP323;
 
   if (sB338>aSHk2) then
      pog4:=sB338-aSHk2
      else
      pog4:=aSHk2-sB338;
 
   if (sBK79>aSHk2) then
      pog5:=sBK79-aSHk2
      else
      pog5:=aSHk2-sBK79;
 
 
//проверка показаний         
if (aa1 = 0) and (aa2 = sTT1) and (aa3 = sP323) and (aa4 = sB338) and (aa5 = sBK79) then
    MessageDlg('Все верно', mtInformation, [mbOK], 0)            
    MessageDlg('Сопоставлено неверно', mtError, [mbOK], 0);
//проверка погрешностей
if (volt1=0) and (volt2=pog2) and (volt3=pog3) and (volt4=pog4) and (volt5=pog5)then
 
    MessageDlg('Все верно', mtInformation, [mbOK], 0)            
else
    MessageDlg('Сопоставлено неверно', mtError, [mbOK], 0);
 
 
end;

Автор: northener 4.4.2011, 02:13
Цитата(anr0ID @  4.4.2011,  01:11 Найти цитируемый пост)
Дело в следующем: когда считаются погрешности и переводятся в строку числа странные получаются. 
Например: 1,99-1,96 получается результат 0,02999999999.

http://www.delphikingdom.com/asp/viewitem.asp?catalogid=374
Машинная арифметика имеет свои особенности, по сравнению с "бумажной" арифметикой.

Автор: amsoft 4.4.2011, 17:19
вместо real используй currency

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