ClientDataSet -> konwersja AsFloat - ciekawe zachowanie

2013-02-08 11:24

Rejestracja: 15 lat temu

Ostatnio: 4 lata temu

0

Mam taki prosty kod:

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.co[...]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.

edytowany 7x, ostatnio: olesio, 2013-02-08 14:27

Pozostało 580 znaków

2013-02-08 11:50

Rejestracja: 7 lat temu

Ostatnio: 5 godzin temu

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...


Chcesz pomocy - pokaż kod - abrakadabra źle działa z techniką.

Pozostało 580 znaków

2013-02-08 13:39

Rejestracja: 14 lat temu

Ostatnio: 40 sekund temu

Lokalizacja: Gorlice

0

Podaję kolejny raz http://www.delphibasics.co.uk/RTL.asp?Name=CompareValue


Nie odpowiadam na PW w sprawie pomocy programistycznej.
Pytania zadawaj na forum, bo:
od tego ono jest ;) | celowo nie zawracasz gitary | przeczyta to więcej osób a więc większe szanse że ktoś pomoże.

Pozostało 580 znaków

2013-02-08 16:38

Rejestracja: 15 lat temu

Ostatnio: 4 lata temu

0

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

Pozostało 580 znaków

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