Firebird/Interbase - zaokrąglanie double precision
1,001 - 1 = 0,001? Nie :p wg bazy po wykonaniu tego działania mamy wynik rodzaju 0,00009999999989. Sytuacji takich jest całkiem sporo przy działaniach na liczbach zmiennoprzecinkowych. Przy wyświetlaniu zaokrąglonego wyniku wszystko jest ok ale przez ten błąd porównując np wartość 0,001 do wartości pola otrzymujemy false. Miał ktoś kiedyś z tym problem i wie jak go rozwiązać może? :>
Przy działaniach na wartościach zmiennoprzecinkowych porównywanie na zasadzie a==b jest ogólnie złym pomysłem. Spróbuj to obejść w ten sposób:
abs(a-b)<=eps
gdzie eps będzie jakąś bardzo malutką liczbą zmiennoprzecinkową.
(to oczywiście tylko pseudokod)