|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
|
Опции темы | Поиск в этой теме |
31.08.2009, 14:41 | #1 |
Регистрация: 30.08.2009
Сообщений: 5
|
DBGrid отображает не тот Float, что я ввел.
Здравствуйте, Я начинающий. Изучаю Delphi, базы данных. Подскажите, пожалуйста, у меня форма, на ней DBGrid, Edit, Button и др. База данных Access (mdb), для соединения использую ADOConnection, набор формируется в ADOQuery. Для занесения данных вызывается форма, там есть TimeEdit, AmountEdit и др., жмем кнопку «Сохранить» и данные, командой INSERT, вставляются в таблицу. В таблице есть поле «Time» тип «Дата/Время» с маской ввода «99:00:00;0;_», есть поле «Amount» (Сумма) тип «Одинарное с плавающей точкой». И ЗДЕСЬ Я НЕ ПОНИМАЮ: Я ввожу в AmountEdit, скажем «88,8», а в TimeEdit «12:31:16», в DBGrid-e же после сохранения Я вижу: в поле Amount «88,8000030517578», в поле Time «30.12.1899 12:31:16». При этом в таблице базы, данные хранятся в том виде в котором я их ввел, «88,8» и «12:31:16». Скажите, Пожалуйста, что это такое и будут ли лишние числа в поле Amount играть какую-то роль если я захочу сложить два таких числа и если будут, то как сделать, чтобы учитывались только два знака после запятой?
Не могу, ни где про это найти (тем более что не знаешь, что искать). Заранее, Спасибо. |
31.08.2009, 14:59 | #2 |
Белик Виталий :)
Старожил
Регистрация: 23.07.2007
Сообщений: 57,097
|
Попробуй в ADOQuery выставить для этого поля свойство DisplayFormat #.##
I'm learning to live...
|
31.08.2009, 15:23 | #3 | |
Регистрация: 30.08.2009
Сообщений: 5
|
Цитата:
|
|
31.08.2009, 15:41 | #4 | |
Белик Виталий :)
Старожил
Регистрация: 23.07.2007
Сообщений: 57,097
|
Цитата:
I'm learning to live...
|
|
31.08.2009, 15:52 | #5 |
Регистрация: 30.08.2009
Сообщений: 5
|
Ясно. Большое Вам Спасибо. И все-таки, если Вас не затруднит, уж очень интересно, откуда берутся эти цифры и дата такая странная? Ну, хотя бы намекните, а я дальше сам.
|
31.08.2009, 16:27 | #6 |
Белик Виталий :)
Старожил
Регистрация: 23.07.2007
Сообщений: 57,097
|
Это просто ошибки функций округления. Я точно не знаю, кстати об этом много написано, и здесь где-то уже обсуждалось, но связано это с ограниченной точностью процессора в счете вещественных чисел.
Не обращай на это внимания если тебе не нужна большая точность.
I'm learning to live...
|
31.08.2009, 16:38 | #7 |
SQL-коддинг
Участник клуба
Регистрация: 16.01.2009
Сообщений: 1,192
|
а ты задавал точность при создании поля
в стандарте анси пишут, что для поля "с плавающей точкой" можно указывать точность - т.е. кол-во знаков после "запятой" но в не очень хороших субд эта фишка так же нехорошо работает, т.е. ты указываешь точность и надеешься что там будут храниться числа, например, с 2 знаками после запятой, а оказывается вот такая чехарда и приходится прикручивать "костыли" в виде ЮДФ (как например реализовано было в интербейзе) для округления чисел а дата такая странная - дык ты ж не указал дату, а по умолчанию она будет именно 30.12.1899 дата ведь имеет составной тип - дата + время |
01.09.2009, 16:59 | #8 | ||
Регистрация: 30.08.2009
Сообщений: 5
|
Точность в таблице задавать пробовал, не помогает.
После установки DisplayFormat в #.## , в DBGrid-е все нормально, а вот попробовал я вывести содержимое в Edit, опять ерунда: в базе храниться 12,3 в Edit-е отображается 12,3000001907349. Попробовал установить другой Access, был 2003 взял 2007, никакой разницы. Скажите можно это как-то решить раз и навсегда, что бы этих лишних цифр не было совсем, чтобы работать только с теми данными, которые ввел? Скажите это вообще, чья вина Delphi или Access-а, я как-то не понял? Цитата:
И еще вопрос, Я в сленге не разбираюсь, я новичок, что значит: Цитата:
|
||
01.09.2009, 17:10 | #9 | |
Белик Виталий :)
Старожил
Регистрация: 23.07.2007
Сообщений: 57,097
|
Цитата:
Получай в Эдит число так: Код:
I'm learning to live...
|
|
01.09.2009, 17:46 | #10 |
SQL-коддинг
Участник клуба
Регистрация: 16.01.2009
Сообщений: 1,192
|
ЮДФ = UDF (User Defined Functions)
по-моему, в парадоксе они недоступны 2 Stilet при чем здесь процессор просто криворукие создатели меня как пользователя не должно волновать каким образом они добьются того же представления введенного числа если в поле задана точность представления этого числа (пусть хоть десятикратное округление прикручивают на уровне БД) Последний раз редактировалось soleil@mmc; 01.09.2009 в 18:54. |
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Как узнать что число не Float(без остатка) при результате деления? | zotox | Помощь студентам | 7 | 19.07.2009 15:49 |
Не тот результат! | Dawystrik | Общие вопросы Delphi | 3 | 22.03.2009 09:50 |
Как сделать так, что б Float-элементы не уезжали друг под друга (если не влазят в экран) | barbiturat | HTML и CSS | 3 | 09.12.2008 10:26 |
Что за ошибка в опере IE7 отлично все отображает а соперы не могу... ((( | Droid | HTML и CSS | 0 | 29.10.2008 19:44 |