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

Вниз

Проблема с дробными числами в Delphi <-> Access   Найти похожие ветки 

 
tolians   (2006-03-02 10:12) [0]

В Access тип поля ставлю "одинарное с плавающей точкой", количество знаков после запятой "2". Подключаю базу к делфи. При вводе дробного числа (например 3.6) из делфи, в базу оно записывается как 3.6000000011 или что-то в таком роде. Если вводить через Access то нормально, как ввел так и есть.  
В чем проблема подскажите.
Если чтото не ясно в вопросе напишите попробую как-нибудь переформулировать. Заранее благодарен.


 
Johnmen ©   (2006-03-02 10:19) [1]

http://www.delphikingdom.com/asp/viewitem.asp?UrlItem=/helloworld/reals.htm


 
tolians   (2006-03-02 10:22) [2]

Не понятно, там написано:
ADODB.Recordset error "800a0cc1"

Item cannot be found in the collection corresponding to the requested name or ordinal.

/asp/libview.asp, line 57

Объясни если не трудно.


 
msguns ©   (2006-03-02 10:23) [3]

Пора уже в кладовочке такую статеечку завести. Вместе с поиском и получением id до вставки ;))

Дельфи тут не при чем. Разве что компоненты датасетные, которых почему-то не "научили" по собственной инициативе округлять числа с плавающей точкой, вместо этого предложив таинственный DisplayFormat.
В базу "ОНО" записывается так потому, что тип поля, предусмотренный Вами в этой самой "базе", предполагает хранение числа в плававющем виде.
Надеюсь, у Вас не возникнет вопроса почему плавающий формат "уродует" числа ?


 
msguns ©   (2006-03-02 10:29) [4]

Еще пояснение по поводу
"В Access тип поля ставлю "одинарное с плавающей точкой", количество знаков после запятой "2". "

Это самое "количество знаков" играет в акцесе роль своеобразного триггера, срабатывающего каждый раз, когда поле принимает новое значение. К числу просто применяется округление, - при этом, естественно, иррациональная дробь, если она имеется, никуда из самого числа не девается. Это во-первых.
Во-вторых, акцесс использует эту Вашу двоечку еще и для обрезания лишних дробных разрядов при отображении в своих гридах или формах (когда Вы в самом акцесе просматриваете содержимое таблицы).


 
tolians   (2006-03-02 10:30) [5]


> Да, такой вопрос у меня возник, но я побаиваюсь даже спрашивать. Так что же мне делать.


 
tolians   (2006-03-02 10:33) [6]

Ну с двоечкой понятно, так и предпологал.


 
msguns ©   (2006-03-02 10:36) [7]

Почитать о формате представления чисел в процессорах семейcтва PC. А именно тот раздел, где подробно описывается способ хранения позиции десятичной точки. В частности, понятия мантиссы, порядка, знака порядка и знака мантиссы. Желательно с примерами.
Где-то с год назад здесь были великолепные уроки Ю.Зотова,- поищите их, там очень хорошо об этом.


 
tolians   (2006-03-02 10:41) [8]

Почитаю обязательно. Но все таки что мне сейчас делать, как это исправить.


 
msguns ©   (2006-03-02 11:11) [9]

Исправлять ничего не надо. Это нормально.
Для чисел, предусматривающих дробную часть, разумеется.

При записи в таблицу можно программно округлять их до нужной разрядности, уменьшая таким образом погрешность при последующих операциях с этими числами (например, при "вертикальном" суммировании)
А при отображении пользоваться упомянутым DisplayFormat, явно задавая кол-во отображаемых дес.знаков. Например TADODataSet.FieldByName("Quontity").DisplayFormat := "0.00"


 
sniknik ©   (2006-03-02 11:12) [10]

сначала читать, исправлять после понимания...

исправленная ссылка из [1]:
http://www.delphikingdom.com/asp/viewitem.asp?catalogid=374


 
msguns ©   (2006-03-02 11:23) [11]

И еще один совет, применительно именно к БД.
Часто, проектируя складские системы, не очень опытные программисты предусматривают для цен товара "живые" 2 знака после запятой, т.е. собственно копейки. И делают грубую ошибку. Т.к. сплошь и рядом цена закупки товара (себестоимость) не может быть округлена до копеек без существенной погрешности. Поэтому рекомендуемая точность для большинства видов товаров (товарных групп) и не только товаров, но и материалов, малоценки, одним словом - Товаро-Материальных-Ценностей (ТМЦ), - это 4 знака после точки или сотые копейки.
То же самое касается и кол-ва, если, конечно, "товар" подразумевает возможность весовых характеристик.
А вот для суммовых полей в документах (накладных) суммы должны быть "живыми", т.к. попадвют в бухгалтерию, где нет понятия долей копеек.


 
Anatoly Podgoretsky ©   (2006-03-03 07:43) [12]

tolians   (02.03.06 10:12)  
Если плавающее, то откуда 2
А если два, то откуда плавающее?


 
msguns ©   (2006-03-03 09:23) [13]

>Anatoly Podgoretsky ©   (03.03.06 07:43) [12]
>Если плавающее, то откуда 2

В акцесе: [Тип данных->Числовой].[Число десятичных знаков] -> 2


 
sniknik ©   (2006-03-03 10:55) [14]

> В акцесе: [Тип данных->Числовой].[Число десятичных знаков] -> 2
это тот же DisplayFormat для самого access-а, на саму базу/формат(тип) числа не влияет (в общем это не аналогия numeric-а в фоксе, где сколько укажеш знаков столько и будет).


 
msguns ©   (2006-03-03 11:08) [15]

>sniknik ©   (03.03.06 10:55) [14]

А я об чем ?
Анатолий спросил, где в акцесе указывается это ограничение,- я указал


 
tolians   (2006-03-05 11:11) [16]

Огромное вам всем спасибо.


 
Anatoly Podgoretsky ©   (2006-03-05 11:28) [17]

msguns ©   (03.03.06 11:08) [15]
Я не это спрашивал!
Я спрашивал откуда у числа с плавающей запятой два фиксированых знака после запятой
Это нонсенс



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

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

Наверх




Память: 0.51 MB
Время: 0.027 c
2-1144397600
Creative
2006-04-07 12:13
2006.04.23
как сохранить TList


15-1143813477
ronyn
2006-03-31 17:57
2006.04.23
half - life и winRoute


2-1144448650
ctudent
2006-04-08 02:24
2006.04.23
TreeView+база данных


1-1142275219
:-))
2006-03-13 21:40
2006.04.23
Кусок Webbrowser в Bitmap


3-1141203381
Alex_d
2006-03-01 11:56
2006.04.23
IAppServer