ClientDataSet -> konwersja AsFloat - ciekawe zachowanie

ClientDataSet -> konwersja AsFloat - ciekawe zachowanie
Pociech
  • Rejestracja: dni
  • Ostatnio: dni
0

Mam taki prosty kod:

Kopiuj
var x: double;
[...]
if x<> ClientDataSet.FieldByName('MyField').AsFloat then
begin
  ShowMessage('Wartości są różne');
end;

I oto co ciekawego się dzieje: w zmiennej x jest liczba 0,8. W polu MyField jest również 0,8. Debuger również pokazuje mi takie same wartości. Jednak program wskakuje do fragmentu z ShowMessage. Dlaczego tak się dzieje? Nie bardzo to rozumiem. Przecież x jest typu double, tak samo jak wartość zwracana przez AsFloat.

---------Dodane:---------

Na stronie Embarcadero (dokumentacja) znalazłem takie coś:
http://docwiki.embarcadero.com/Libraries/XE3/en/Data.DB.TField.AsFloat
ale po najechaniu kursorem myszy na "AsFloat" w kodzie, Delphi podpowiada mi, że jest to typ "System.Extended". Niestety, użycie zmiennej typu Extended nic nie zmienia.

Używam Delphi 2010 Architect.

abrakadaber
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 6610
0

Ech, tyle razy było, że liczb zmiennoprzecinkowych nie porównuje się w ten sposób a tu dalej swoje i się jeszcze dziwi...

KA
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Gorlice
Pociech
  • Rejestracja: dni
  • Ostatnio: dni
0

Dzięki, nie wiedziałem, że nie da się tak bezpośrednio porównywać liczb zmiennoprzecinkowych. Przyda się na przyszłość :)

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.