Formuła z excela w delphi.

0

Witam kolegów. Mam następujący problem próbuję przenieść formułę z excela do programu. Wynik działania aplikacji nie odzwierciedla wyników excela. Gdzie może leżeć błąd ?

Const
A = -1,63E+00;
B = -3,89E-02;
C = 4,05E-03;
D = -8,19E-04;
E = 4,15E-05;
F = -9,51E-07;
G =  1,13E-08;
H =  -6,86E-11;
I =  1,68E-13;
Var
M, T, KT : Real;
begin
M := StrToFloat(Edit1.Text);
T := StrToFloat(Edit2.Text);



KT := M+0.001*(A*Power(M*100,0)+ B*Power(M*100,1)+C*Power(M*100,2)+D*Power(M*100,3)+E*Power(M*100,4)+F*Power(M*100,5)+G*Power(M*100,6)+H*Power(M*100,7)+I*Power(M*100,8)) + (T-20)  ;

Edit3.Text := FloatToStr(KT);
end;

W uses dodane Math;

Załączam excela

0
  1. co Ci wychodzi w excelu a co w delphi
  2. wklej tu formułę z excela
0
  1. W excelu podając np. Stężenie 70% i Temp 25C wychodzi 68,3, a w programie 913305067803856
  2. Formuła z excela
=D3+0,001*(S15*(D3*100)^0+S17*(D3*100)^1+S19*(D3*100)^2+S21*(D3*100)^3+S23*(D3*100)^4+S25*(D3*100)^5+S27*(D3*100)^6+S29*(D3*100)^7+S31*(D3*100)^8)*(H3-20) 

Kombinowałem już chyba na wszystkie sposoby z nawiasami i bez itd. i nic.

0

zmień Real na Extended albo Comp

0

Zmieniałem i dalej wynik zły, jakieś ogromne liczby

0

@Jozzek666: zapisz ten kod jeszcze raz, przy czym zmienne i stałe nazwij tak samo jak pola w arkuszu - to powinno być pomocne. No i te stałe w pierwszym poście to jakaś komedia - zapis ich wartości jest niepoprawny składniowo. Typ Extended raczej nie jest konieczny - już Double w zupełności wystarczy.

Obstawiam, że wyrażenie jest źle pogrupowane za pomocą nawiasów - stąd za duży wynik.

2

Przepisałem z arkusza ale i tak dziwnie dostaje wynik 100 razy mniejszy (stąd na końcu wynik x 100). Ponieważ nie mam już czasu nad tym siedzieć to tak zostawiam może ktoś wymyśli dlaczego.

const
  CONST_VALS: array [0..8] of Double = (-1.63047536298305, -0.0389141113198029,
    0.00404832046043522, -0.000819167219174309, 0.0000414881148483179,
    -9.51242100129484E-07, 1.13340709092355E-08, -6.86424718193E-11,
    1.67609011302485E-13);
var
  D3, H3, J3: Double;
  Value: Double;
  i: Integer;
begin
  D3:= StrToFloat(Edit1.Text);
  H3:= StrToFloat(Edit2.Text);

  Value:= 0;
  for i:= Low(CONST_VALS) to High(CONST_VALS) do
    Value:= Value + CONST_VALS[i] * Power(D3 * 100, i);

  J3:=D3+0.001*Value*(H3-20);

  Edit3.Text:= FormatFloat('##.#', J3 * 100);
end;
0

Dzięki kolego.

Wyniki wychodzą takie same jak wcześniej.

Tutaj daję screeny

@kAzek Sorry :D

1 użytkowników online, w tym zalogowanych: 0, gości: 1