Главная страница
    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.012 c
3-45225
silenser
2002-09-24 09:50
2002.10.14
таблица


3-45165
Dark Hunter
2002-09-20 14:45
2002.10.14
Oracle и...?


14-45542
AL2002
2002-09-19 16:51
2002.10.14
Реально ли такое толкануть?


14-45510
Undert
2002-09-17 19:27
2002.10.14
<div>!!!


14-45588
хамло
2002-09-20 11:46
2002.10.14
А какая она, профессиональная болезнь программистов?





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский