![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Погрешности в Float полях... (Access + ADO + Delphi 7) [D7, Access]
Juju © (2006-10-27 19:01:00)У меня постоянные сложности с Currency и Float полями в БД.В данном случае проблема следующая:
История:
Основная валюта в программе доллар США. Т.е. заносится цена в поле PRICE_USDи от него вычисляются остальные поля...
Обозначения:
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, т.е. дальше и идти не надо.
Пробовал решить проблему:
Функцией RoundTo(PRICE_USD,-2), но в конечном итоге значения получаются с непозволительной погрешностью...
Кто работал с Float (Currency) полями и обходил (сталкивался) с такими проблемами, проблемами точности вычисления разной валюты...
Плохиш (2006-10-30 11:18:00) [1]
> Значение которое заносится: 5,9405(физически)
> В базе Access принимает: 5,9405 9991836548
Врёт и не краснеет :-(
Johnmen (2006-10-27 22:32:00) [2]17-й пост в http://www.delphimaster.ru/cgi-bin/forum.pl?id=1161222527&n=18
sniknik (2006-10-27 22:25:00) [3]> Кто работал с Float (Currency) полями и обходил (сталкивался) с такими проблемами
не сталкивался (проблемы както так странно обходят меня стороной. ну... такого вот плана... а лучше бы другие), но позволю себе заметить, Float это не Currency (написано так, как будто это уточнение, синоним типа...), одно это число с плавающей запятой а второе с фиксированной, целочисленный, денежный тип.
что использовать под деньги даже не обсуждается...
Juju (2006-10-27 21:21:00) [4]1) Одинарное с плавающей точкой/фиксированный
2) Двойное с плавающей точкой/фиксированный
3) Действительный/фиксированный
Desdechado (2006-10-27 20:36:00) [5]тип поля какой?
чем смотришь то, что внесено?
И почитай букварь про механизмы представления чисел с плавающей точкой.
Если есть в акцессе типы с фиксированной точкой, используй их.
Juju (2006-10-27 19:39:00) [6]И в итоге про - 4 знака после запятой в установках поля в базе Access.
Значение которое заносится: 5,9405(физически)
В базе Access принимает: 5,94059991836548
?????
Desdechado (2006-10-27 19:26:00) [7]double precision вместо float
или таки заточенный под это currency
Juju (2006-10-27 19:18:00) [8]Ок, спасибо. Так я уже пробовал - проблему это не решает. Физически заношу в базу 24,00- отображается 24,0002... В чем проблема?
Desdechado (2006-10-27 19:12:00) [9]валюту считают с не менее, чем 4 знаками после запятой