Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 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
4-1138956993
hgd
2006-02-03 11:56
2006.04.23
Подскажите о методе нажатия кнопку в другом приложении


3-1139914203
DelphiN!
2006-02-14 13:50
2006.04.23
Как в FB изменить стандартный пароль


9-1128556694
X-Disa
2005-10-06 03:58
2006.04.23
32-битная графика в DelphiX


15-1143907200
ArtemESC
2006-04-01 20:00
2006.04.23
Типа шутки штоли...


11-1125182052
ebta
2005-08-28 02:34
2006.04.23
just a little bug v2.10





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