Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Погрешности в Float полях... Access + ADO + Delphi 7 
:(
    Опции темы
Juju
  Дата 27.10.2006, 16:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 51
Регистрация: 26.10.2006

Репутация: нет
Всего: 1



У меня постоянные сложности с Currency и Float полями в БД. В данном случае проблема следующая:
История:
Основная валюта в программе доллар США. Т.е. Она заносится в поле PRICE_USD и от него строятся калькуляционные поля т.е. "Стоимость $" , "Цена (руб.)", "Стоимость (руб)".
Проблема:
В поле PRICE_USD я заношу, например, 2.72. В базу Access попадает 2.72 (т.е. все Ok). При калькулировании остальных же полей происходит следующее: когда по формуле PRICE_USD*KURS_USD вычисляется "Цена (руб.)" - значение поля PRICE_USD уже не 2.72 (которое заносилось и сохранялось в базе), а 2.7199998342.
Пробовал решить проблему:
Функцией RoundTo(PRICE_USD,-2), но в конечном итоге значения получаются с непозволительной погрешностью...
Кто работал с Float (Currency) полями и обходил (сталкивался) с такими проблемами? Посоветуйте... и конечно сложно на данном этапе менять структуру базы.

Это сообщение отредактировал(а) Juju - 27.10.2006, 17:38
PM MAIL   Вверх
Akella
Дата 27.10.2006, 17:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Творец
****


Профиль
Группа: Модератор
Сообщений: 18485
Регистрация: 14.5.2003
Где: Корусант

Репутация: 29
Всего: 329



Цитата(Juju @  27.10.2006,  16:36 Найти цитируемый пост)
значение поля PRICE_USD уже не 2.72

как такое может быть?
ты ведь пишешь

Цитата(Juju @  27.10.2006,  16:36 Найти цитируемый пост)
В поле PRICE_USD я заношу, например, 2.72. В базу Access попадает 2.72 (т.е. все Ok). 

Поставь вопрос правильно.

Добавлено @ 17:05 
Цитата(Juju @  27.10.2006,  16:36 Найти цитируемый пост)
когда по формуле PRICE_USD*KURS_USD вычисляется "Стоимость $" 

где это вычисляется?

Стоимость $ - это калькулируемое поле?

Я не знаю, если чесно, есть ли в Access тип "с фиксированной точкой", а НЕ Float. Попробуй его использовать.
PM MAIL   Вверх
Juju
Дата 27.10.2006, 17:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 51
Регистрация: 26.10.2006

Репутация: нет
Всего: 1



Уточняю проблему.
Обозначения:
PRICE_USD(Цена в $) - физически в базе
размер поля "Одинарное с плавающей точкой" 
формат поля "Основной" (т.е. 3454,34)
кол-во знаков после запятой 2
PRICE_RUB(Цена в руб.) - калькуляционное Float
COST_RUB(Стоимость в руб.) - калькуляционное Float (ну до него мы не дойдем т.к. проблема будет еще в начале)
KursUSD - переменная, которая содержит курс доллара США.
Действия:
Опускаю написания названия таблицы. Пишу только название полей чтобы не захламлять суть.
В поле PRICE_USD заношу значение 7,33
Открываю Access, проверяю значение, все в порядке - 7,33
Калькулирую поля:
PRICE_RUB := PRICE_USD * KursUSD;
И уже на этом этапе PRICE_USD принимает значение: 7,32999992370605, т.е. дальше и идти не надо.


Это сообщение отредактировал(а) Juju - 27.10.2006, 17:47
PM MAIL   Вверх
Akella
Дата 30.10.2006, 09:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Творец
****


Профиль
Группа: Модератор
Сообщений: 18485
Регистрация: 14.5.2003
Где: Корусант

Репутация: 29
Всего: 329



Цитата(Juju @  27.10.2006,  17:31 Найти цитируемый пост)
PRICE_USD(Цена в $) - физически в базе
размер поля "Одинарное с плавающей точкой" 


Цитата(Juju @  27.10.2006,  17:31 Найти цитируемый пост)
PRICE_RUB(Цена в руб.) - калькуляционное Float

сделай поля не сплавающей, а с фиксированной точкой.

Это сообщение отредактировал(а) Akella - 30.10.2006, 09:01
PM MAIL   Вверх
Juju
Дата 30.10.2006, 09:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 51
Регистрация: 26.10.2006

Репутация: нет
Всего: 1



Спасибо уже сделал...  smile  Здесь есть информация по проблеме : Неочевидные особенности вещественных чисел автор Антон Григорьев. За ссылку спасибо Johnmen.

Это сообщение отредактировал(а) Juju - 30.10.2006, 10:05
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Базы данных и репортинг"
Vit
Петрович

Запрещено:

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами


Обязательно указание:

1. Базы данных (Paradox, Oracle и т.п.)

2. Способа доступа (ADO, BDE и т.д.)


  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи
  • Вопросы по SQL и вопросы по базам данных не связанные с Дельфи задавать здесь

FAQ раздела лежит здесь!


Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Vit, Петрович.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Базы данных и репортинг | Следующая тема »


 




[ Время генерации скрипта: 0.0465 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.