Brak wyświetlenia wyniku zmiennoprzecionkowego

0

Witam,
mam problem, który wydaje się (jest) banalny.
Chciałbym otrzymać wynik w formacie zmiennoprzecinkowym a dostaję w całkowitym.

Wykonuję polecenie w Delphi

with FdQuery2, SQL do
    begin
      Close;
      Clear;
      Add('Select  SUM(ocena) /  count(*)  from OCENY where ID_PRZDM = :id');
      ParamByName('id').AsInteger := id_przedmiotu;
      Open;
    end;
   srednia := (FDQuery2.Fields[0].AsExtended);
   showmessage(floattostr(srednia));

np dla liczb 1,3,5,1 otrzymuję wynik 2.

Jakiś pomyśł dlaczego ?

dodanie znacznika <code class="delphi"> - @furious programming

0

co to za baza?

0

Używam bazy IB_lite dla androida.
Rozszerzenie GDB.

0

Problem nie jest po stronie delphi, a po stronie bazy danych, jak sądzę. Podejrzewam, że kolumna oceny w tabeli OCENA jest całkowitoliczbowa. Suma liczb całkowitych to też liczba całkowita. Skoro dzielna to liczba całkowita, to wynik też jest liczbą całkowitą.

Nigdy nie używałem IB. Ale mam nadzieję, że zadziała poniższe:

(1.0 * sum(ocena)) / count(*)

W MS SQL użyłbym konwersji, np:

convert(real, sum(ocena) ) / count(*)
0
Kazik1 napisał(a):

Witam,
mam problem, który wydaje się (jest) banalny.
Chciałbym otrzymać wynik w formacie zmiennoprzecinkowym a dostaję w całkowitym.

Wykonuję polecenie w Delphi

with FdQuery2, SQL do
    begin
      Close;
      Clear;
      Add('Select  SUM(ocena) /  count(*)  from OCENY where ID_PRZDM = :id');
      ParamByName('id').AsInteger := id_przedmiotu;
      Open;
    end;
   srednia := (FDQuery2.Fields[0].AsExtended);
   showmessage(floattostr(srednia));

np dla liczb 1,3,5,1 otrzymuję wynik 2.

Jakiś pomyśł dlaczego ?

Dlatego, że typ danych w polu ocena jest całkowity (zgaduję) i dlatego, że count zawsze zwraca typ całkowity.
Sadam Ci napisał co i jak, tyle że w IB nie ma Convert, ale jest CAST czyli standard z ANSI SQL.

Poza tym, ten kod jest do bani ;-)
Powinno być mniej więcej tak (potrzebne będzie Connection):

  ShowMessage(VarToStrDef(Connection.ExecSQLScalar('Select cast(SUM(ocena) as decimal(19,4)) / count(*) from OCENY where ID_PRZDM = :id', [id_przedmiotu], [ftInteger]), '<brak>'));

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