![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Проблема с дробными числами в Delphi <-> Access [D6]
tolians © (2006-03-02 10:12:00)В Access тип поля ставлю "одинарное с плавающей точкой", количество знаков после запятой "2". Подключаю базу к делфи. При вводе дробного числа (например 3.6) из делфи, в базу оно записывается как 3.6000000011 или что-то в таком роде. Если вводить через Access то нормально, как ввел так и есть.
В чем проблема подскажите.
Если чтото не ясно в вопросе напишите попробую как-нибудь переформулировать. Заранее благодарен.
Anatoly Podgoretsky (2006-03-05 11:28:00) [1]msguns © (03.03.06 11:08) [15]
Я не это спрашивал!
Я спрашивал откуда у числа с плавающейзапятой два фиксированыхзнака после запятой
Это нонсенс
tolians (2006-03-05 11:11:00) [2]Огромное вам всем спасибо.
msguns (2006-03-03 11:08:00) [3]>sniknik © (03.03.06 10:55) [14]
А я об чем ?
Анатолий спросил, где в акцесе указывается это ограничение,- я указал
sniknik (2006-03-03 10:55:00) [4]> В акцесе: [Тип данных->Числовой].[Число десятичных знаков] -> 2
это тот же DisplayFormat для самого access-а, на саму базу/формат(тип) числа не влияет (в общем это не аналогия numeric-а в фоксе, где сколько укажеш знаков столько и будет).
msguns (2006-03-03 09:23:00) [5]>Anatoly Podgoretsky © (03.03.06 07:43) [12]
>Если плавающее, то откуда 2
В акцесе: [Тип данных->Числовой].[Число десятичных знаков] -> 2
Anatoly Podgoretsky (2006-03-03 07:43:00) [6]tolians (02.03.06 10:12)
Если плавающее, то откуда 2
А если два, то откуда плавающее?
msguns (2006-03-02 11:23:00) [7]И еще один совет, применительно именно к БД.
Часто, проектируя складские системы, не очень опытные программисты предусматривают для цен товара "живые" 2 знака после запятой, т.е. собственно копейки. И делают грубую ошибку. Т.к. сплошь и рядом цена закупки товара (себестоимость) не может быть округлена до копеек без существенной погрешности. Поэтому рекомендуемая точность для большинства видов товаров (товарных групп) и не только товаров, но и материалов, малоценки, одним словом - Товаро-Материальных-Ценностей (ТМЦ), - это 4 знака после точки или сотые копейки.
То же самое касается и кол-ва, если, конечно, "товар" подразумевает возможность весовых характеристик.
А вот для суммовых полей в документах (накладных) суммы должны быть "живыми", т.к. попадвют в бухгалтерию, где нет понятия долей копеек.
sniknik (2006-03-02 11:12:00) [8]сначала читать, исправлять после понимания...
исправленная ссылка из [1]:
http://www.delphikingdom.com/asp/viewitem.asp?catalogid=374
msguns (2006-03-02 11:11:00) [9]Исправлять ничего не надо. Это нормально.
Для чисел, предусматривающих дробную часть, разумеется.
При записи в таблицу можно программно округлять их до нужной разрядности, уменьшая таким образом погрешность при последующих операциях с этими числами (например, при "вертикальном" суммировании)
А при отображении пользоваться упомянутым DisplayFormat, явно задавая кол-во отображаемых дес.знаков. Например TADODataSet.FieldByName('Quontity').DisplayFormat := '0.00'
tolians (2006-03-02 10:41:00) [10]Почитаю обязательно. Но все таки что мне сейчас делать, как это исправить.
msguns (2006-03-02 10:36:00) [11]Почитать о формате представления чисел в процессорах семейcтва PC. А именно тот раздел, где подробно описывается способ хранения позиции десятичной точки. В частности, понятия мантиссы, порядка, знака порядка и знака мантиссы. Желательно с примерами.
Где-то с год назад здесь были великолепные уроки Ю.Зотова,- поищите их, там очень хорошо об этом.
tolians (2006-03-02 10:33:00) [12]Ну с двоечкой понятно, так и предпологал.
tolians (2006-03-02 10:30:00) [13]
> Да, такой вопрос у меня возник, но я побаиваюсь даже спрашивать. Так что же мне делать.
msguns (2006-03-02 10:29:00) [14]Еще пояснение по поводу
"В Access тип поля ставлю "одинарное с плавающей точкой", количество знаков после запятой "2". "
Это самое "количество знаков" играет в акцесе роль своеобразного триггера, срабатывающего каждый раз, когда поле принимает новое значение. К числу просто применяется округление, - при этом, естественно, иррациональная дробь, если она имеется, никуда из самого числа не девается. Это во-первых.
Во-вторых, акцесс использует эту Вашу двоечку еще и для обрезания лишних дробных разрядов при отображении в своих гридах или формах (когда Вы в самом акцесе просматриваете содержимое таблицы).
msguns (2006-03-02 10:23:00) [15]Пора уже в кладовочке такую статеечку завести. Вместе с поиском и получением id до вставки ;))
Дельфи тут не при чем. Разве что компоненты датасетные, которых почему-то не "научили" по собственной инициативе округлять числа с плавающей точкой, вместо этого предложив таинственный DisplayFormat.
В базу "ОНО" записывается так потому, что тип поля, предусмотренный Вами в этой самой "базе", предполагает хранение числа в плававющем виде.
Надеюсь, у Вас не возникнет вопроса почему плавающий формат "уродует" числа ?
tolians (2006-03-02 10:22:00) [16]Не понятно, там написано:
ADODB.Recordset error '800a0cc1'
Item cannot be found in the collection corresponding to the requested name or ordinal.
/asp/libview.asp, line 57
Объясни если не трудно.
Johnmen (2006-03-02 10:19:00) [17]http://www.delphikingdom.com/asp/viewitem.asp?UrlItem=/helloworld/reals.htm