Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 2002.10.14;
Скачать: [xml.tar.bz2];

Вниз

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

 
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;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.47 MB
Время: 0.007 c
3-45221
vich
2002-09-23 22:00
2002.10.14
Как прописать файлы библиотек в программе?


14-45555
Grifon
2002-09-20 09:13
2002.10.14
Троянские лошади...


4-45659
Lamer86
2002-08-28 22:14
2002.10.14
Критические ошибки


4-45648
EugeneCher
2002-09-01 22:53
2002.10.14
SetTimer


14-45504
Darts
2002-09-16 19:14
2002.10.14
Стоимость Delphi





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский