Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2007.01.21;
Скачать: CL | DM;

Вниз

Погрешности в 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;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.038 c
9-1140608209
grisme
2006-02-22 14:36
2007.01.21
OpenGL Extensions


15-1167778355
Footballer
2007-01-03 01:52
2007.01.21
Не могу найти сайт


15-1167644806
Cyrax
2007-01-01 12:46
2007.01.21
Правильное написание фр. "Теле-, аудио-, видео-, бытовая техника"


4-1157313615
Blackcat
2006-09-04 00:00
2007.01.21
Сообщения Windows


2-1167416624
heaven
2006-12-29 21:23
2007.01.21
Скрыть процес с панели задач (это не то о чём думаете)))