проблема с float

IBX, FIBPlus, UIB, ADO, .Net и прочее-прочее-прочее, в общем все, что относится к созданию приложений, работающих с InterBase, Firebird и Yaffil - клиент-серверных, трехзвенных, консольных и т.п.

Модератор: kdv

Ответить
santilaas
Сообщения: 51
Зарегистрирован: 27 авг 2005, 21:05

проблема с float

Сообщение santilaas » 23 апр 2006, 08:32

У меня в таблице имеется поле типа float, когда я программно забиваю в него данные (скажем записываю число 44,55), он сам преобразует его в нечто типа: 44,5499992370605.
Как сделать, чтобы записывалось именно то число, которое я ввожу???
Использую FibPlus5.2

hvlad
Разработчик Firebird
Сообщения: 1244
Зарегистрирован: 21 мар 2005, 10:48

Сообщение hvlad » 23 апр 2006, 12:07

Не использовать float
никогда и нигде

santilaas
Сообщения: 51
Зарегистрирован: 27 авг 2005, 21:05

Сообщение santilaas » 23 апр 2006, 15:37

просто сам тип Float занимает меньше места нежели тип Double precision, вот я его и использую. Нет ну зачем то его ведь создали - я думаю как-то можно с ним "разговаривать на "ты"". Только как?

kdv
Forum Admin
Сообщения: 6595
Зарегистрирован: 25 окт 2004, 18:07

Сообщение kdv » 23 апр 2006, 16:38

его создали для данных, для которых пофиг погрешность.
сэкономил, использовал 4 байта а не 8? получи погрешность.
К слову, погрешность будет всегда при работе с ВЕЩЕСТВЕННЫМИ числами (о чем учат еще в школе), только при разной точности - в зависимости от float и double. для хранения денег надо использовать целые числа - в третьем диалекте numeric (x, scale).

НА САЙТЕ это все сведено в раздел round (округление чисел).

santilaas
Сообщения: 51
Зарегистрирован: 27 авг 2005, 21:05

Сообщение santilaas » 23 апр 2006, 18:19

его создали для данных, для которых пофиг погрешность
- можно пример таких данных?!
А насчет типа Double Precision - сколько не слышал - именно этот тип используют для работы с деньгами.
И ещё: т.е если мне нужно число типа: 9999,99, то лучше использовать NUMERIC(7,2)?

kdv
Forum Admin
Сообщения: 6595
Зарегистрирован: 25 окт 2004, 18:07

Сообщение kdv » 23 апр 2006, 18:37

почитай, в конце-концов, datadef.pdf про numeric и decimal.
насчет вещественных для денег - на заборе тоже всякая фигня написана.
"пример данных" - хоть бы температура окружающей среды.

читай www.ibase.ru/devinfo/round.htm

и еще
http://www.shubert.ru/main.php?sect=2&sub=11&doc=6

p.s. про грид твой пост удалил. спрашивай на дельфийских форумах разработчиков. Я здесь все, что не касается IB/FB, удаляю.

santilaas
Сообщения: 51
Зарегистрирован: 27 авг 2005, 21:05

Сообщение santilaas » 23 апр 2006, 19:48

Спасибо, kvd.
Документы (на которые ссылки) прочитал - теперь знаю больше.
А про
спрашивай на дельфийских форумах разработчиков. Я здесь все, что не касается IB/FB, удаляю
- признаю, виноват - просто где как не здесь все про это могут знать.

kdv
Forum Admin
Сообщения: 6595
Зарегистрирован: 25 окт 2004, 18:07

Сообщение kdv » 23 апр 2006, 20:17

просто где как не здесь все про это могут знать.
тебе надо туда, где этим EHLib пользуются. А соответственно - на дельфийский форум, хоть бы на sql.ru.
Здесь в большинстве отвечают спецы, которым эти всякие гриды до лампочки. И гриды сами по себе никак не связаны с форматом, откуда берутся данные (хоть из dbf).

smu
Сообщения: 39
Зарегистрирован: 29 окт 2005, 10:12

Сообщение smu » 25 апр 2006, 01:46

santilaas писал(а):
его создали для данных, для которых пофиг погрешность
- можно пример таких данных?!
Например результаты математического моделирования физических процессов, результаты измерений и т.п. когда известно что погрешность получаемых величин больше погрешности типа float.

Ответить