Форум: "Базы";
Текущий архив: 2007.01.21;
Скачать: [xml.tar.bz2];
ВнизПогрешности в Float полях... (Access + ADO + Delphi 7) Найти похожие ветки
← →
Juju (2006-10-27 19:01) [0]У меня постоянные сложности с 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) полями и обходил (сталкивался) с такими проблемами, проблемами точности вычисления разной валюты...
← →
Desdechado © (2006-10-27 19:12) [1]валюту считают с не менее, чем 4 знаками после запятой
← →
Juju (2006-10-27 19:18) [2]Ок, спасибо. Так я уже пробовал - проблему это не решает. Физически заношу в базу 24,00 - отображается 24,0002... В чем проблема?
← →
Desdechado © (2006-10-27 19:26) [3]double precision вместо float
или таки заточенный под это currency
← →
Juju (2006-10-27 19:39) [4]И в итоге про - 4 знака после запятой в установках поля в базе Access.
Значение которое заносится: 5,9405 (физически)
В базе Access принимает: 5,94059991836548
?????
← →
Desdechado © (2006-10-27 20:36) [5]тип поля какой?
чем смотришь то, что внесено?
И почитай букварь про механизмы представления чисел с плавающей точкой.
Если есть в акцессе типы с фиксированной точкой, используй их.
← →
Juju (2006-10-27 21:21) [6]1) Одинарное с плавающей точкой/фиксированный
2) Двойное с плавающей точкой/фиксированный
3) Действительный/фиксированный
← →
sniknik © (2006-10-27 22:25) [7]> Кто работал с Float (Currency) полями и обходил (сталкивался) с такими проблемами
не сталкивался (проблемы както так странно обходят меня стороной. ну... такого вот плана... а лучше бы другие), но позволю себе заметить, Float это не Currency (написано так, как будто это уточнение, синоним типа...), одно это число с плавающей запятой а второе с фиксированной, целочисленный, денежный тип.
что использовать под деньги даже не обсуждается...
← →
Johnmen © (2006-10-27 22:32) [8]17-й пост в http://delphimaster.net/view/2-1161222527/
← →
Плохиш © (2006-10-30 11:18) [9]
> Значение которое заносится: 5,9405 (физически)
> В базе Access принимает: 5,94059991836548
Врёт и не краснеет :-(
Страницы: 1 вся ветка
Форум: "Базы";
Текущий архив: 2007.01.21;
Скачать: [xml.tar.bz2];
Память: 0.49 MB
Время: 0.056 c