Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2002.10.14;
Скачать: CL | DM;

Вниз

Вычитание   Найти похожие ветки 

 
DDDD   (2002-09-20 15:39) [0]

Здрасте!
Есть такое выражение
dm.TblSpisKartMaterKol_Pol.AsFloat:=dm.TblSpisKartMaterKol_Pol.AsFloat-dm.TblTempAktKol1.AsFloat;
Где две таблицы Парадокс и поля типа NUMBER.
Когда результатом вычитания должен быть 0 получается 4,56-Е15 или там другое число в огромной степени.
В чем дело помогите!
сПАСИБО.


 
Peter Gluhiy ©   (2002-09-20 15:48) [1]

dm.TblSpisKartMaterKol_Pol.AsFloat:=round((dm.TblSpisKartMaterKol_Pol.AsFloat-dm.TblTempAktKol1.AsFloat)*100)/100;


 
DDDD   (2002-09-20 15:56) [2]

А можно узнать почему и зачем. Если конечно не тяжело!


 
DDDD   (2002-09-20 16:01) [3]

А можно узнать почему и зачем! Если конечно не тяжело, а то выглядет это как то странно и страшно!


 
Peter Gluhiy ©   (2002-09-20 16:06) [4]

Та не страшно это :-)
Округление до двух знаков после запятой.


 
DDDD   (2002-09-20 16:15) [5]

Да дело в том что должен получится 0.
К примеру 23-23 должен 0 а получается 4,245678456-Е15


 
Johnmen ©   (2002-09-20 16:16) [6]

Погрешности разрядной сетки, однако... :o)))


 
DDDD   (2002-09-20 16:18) [7]

Ну и че делать скажите пожалуйста!!!


 
Johnmen ©   (2002-09-20 16:24) [8]

Перед вычитанием - округлять до потребной точности...:)))


 
DDDD   (2002-09-20 16:32) [9]

>>Johnmen
Перед вычитанием - округлять до потребной точности...:)))

Что округлять я что то не понял.
Я пробовал приводить их к другим !!! типам данных все равно!!!


 
Peter Gluhiy ©   (2002-09-20 16:36) [10]

Ну что ты не можеш round написать!!!


 
DDDD   (2002-09-20 16:37) [11]

>>Johnmen
Перед вычитанием - округлять до потребной точности...:)))

Что округлять я что то не понял.
Я пробовал приводить их к другим !!! типам данных все равно!!!


 
Johnmen ©   (2002-09-20 16:38) [12]

Если поля целочисленные, то AsInteger и проблем не будет,
если нет и AsFloat - то см. выше, в т.ч. Peter Gluhiy © (20.09.02 15:48)


 
DDDD   (2002-09-20 16:45) [13]

round не пойдет :
Во первых обрабатывается очень много записей и это и так не быстро.
Во вторых то я все таки не понял к чему round к ответу или к слогаемым!!! Если к слогаемым так числа целые ну максимум три знака после запятой.


 
Johnmen ©   (2002-09-20 16:50) [14]

Применяй округление к конечному рез-ту (так побыстрее)...


 
DDDD   (2002-09-20 16:57) [15]

Спасибо всем если нечего больше сказать!


 
Мышь   (2002-09-21 21:29) [16]

Замечу, что X := Round(X*100) / 100 не гарантирует отсутствия потери точности в типах с плавающей точкой. Есть спец. функция, которая округляет float-число до заданной точности. Сказал бы, но хоть убей, не помню, как ее зовут. Что-то типа *Int*. Короче, извините. Однако и эта функция может вернуть некорректный результат, так как потеря точности связана с методом хранения таких чисел. Например, после X := 0, можно увидеть в X что нибудь типа 0.000001. Я видел такой глюк в 6-ом знаке, хотя это и нонсенс.


 
MsGuns ©   (2002-09-21 21:57) [17]

В таблицах типа Paradox при использовании чисел типа Float в вычислениях неизбежно появление т.н. "хвостов", т.е. когда 23-23 не равно 0 (а равно -0.00000000008765 или +0.00000...).
Практически это выглядит так: остаток на складской карточке=0, а сумма что-то типа приведенного ниже, в рез-те при выдаче отчета о нулевых позициях, такие карточки туда не попадают.
Можно, конечно, на это наплевать, ибо на кон.балансе по складу такие "молекулы" не сказываются, однако не всем клиентам нравится такие "хвосты". Поэтому есть 2 выхода из такой ситуации:
1. Заменить Float на BCD (но там есть несколько подводных камней)
2. Использовать округления после каждого вычисления.

Других эффективных средств, насколько я знаю, нет.


 
Виталий Панасенко   (2002-09-23 09:16) [18]

Побробуй BCD ENABLE=True в алиасе



Страницы: 1 вся ветка

Текущий архив: 2002.10.14;
Скачать: CL | DM;

Наверх




Память: 0.5 MB
Время: 0.019 c
1-45385
Антон К.
2002-09-19 20:02
2002.10.14
Маша сильно болеет туберкулезом.


3-45219
Bable
2002-09-23 15:19
2002.10.14
Как присвоить полю типа


14-45538
Undert
2002-09-19 22:25
2002.10.14
Предложение администрации и модераторам


1-45410
dagsess
2002-10-03 12:02
2002.10.14
Поиск в памяти процесса


1-45453
Дмитрий К.К.
2002-10-01 19:43
2002.10.14
Загрузить в дерево