Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 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
15-1167031624
WondeRu
2006-12-25 10:27
2007.01.21
Вот и я женился!


2-1167913674
Neket
2007-01-04 15:27
2007.01.21
Иконка Программы


15-1167399034
eXPell
2006-12-29 16:30
2007.01.21
Помнится была ветка о ставках


2-1168029033
Александр Свентицкий
2007-01-05 23:30
2007.01.21
Вывод данных в файл


1-1164780901
Alex_C
2006-11-29 09:15
2007.01.21
Как во время убить мультимедиа таймер?





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский