Форум: "Базы";
Текущий архив: 2006.04.23;
Скачать: [xml.tar.bz2];
ВнизПроблема с дробными числами в 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;
Скачать: [xml.tar.bz2];
Память: 0.48 MB
Время: 0.011 c