Лишние знаки после запятой в поле вещественного типа.

Сегодня пятница!
Дата: 03.08.2012 10:18:37
Привет всем!

FB2.1 dialect 3
клиент писан на Delphi 2010 + FIB 6.9.9


В бд присутствует таблица с парой полей типа FLOAT. Когда клиентом сохраняю туда, например, значение 10890,47 то в БД это число показывается как 10890,4697265625.
Изменение типов этих полей поочередно на DOUBLE PRECISION, DECIMAL(6, 2) и NUMERIC(6, 2) результата не дало.

При чем пробовал вводить числа и в IBExpert'е (версия 2011-01-12) - тот же результат => клиент тут не при чем.

хотелось-бы, чтоб в базе числа хранились в том виде, в котором я их туда записываю. Как победить?

Спасибо!
Dimitry Sibiryakov
Дата: 03.08.2012 11:41:54

Сегодня пятница!
хотелось-бы, чтоб в базе числа хранились в том виде, в котором я их туда записываю. Как
победить?

Не использовать числа с плавающей запятой.
RTFM

Posted via ActualForum NNTP Server 1.5

kdv
Дата: 03.08.2012 11:54:19
в частности, никогда не использовать FLOAT:
http://www.ibase.ru/devinfo/round.htm
Сегодня пятница!
Дата: 03.08.2012 13:07:18
Понял вот что: изначально тип поля был FLOAT. Потом я его поменял на DOUBLE PRECISION - нет результата. То есть FB как бы проигнорировал то, что я сменил тип поля.
Но вот если в этой же табле создать новое поле с типом DOUBLE PRECISION, то все ок... фигня какаято. первый раз такое встречаю.

это особенность FB? или я чего то не догоняю?
kdv
Дата: 03.08.2012 13:11:08
Сегодня пятница!
о есть FB как бы проигнорировал то, что я сменил тип поля.

ёкарный бабай, какое открытие.
http://www.ibase.ru/devinfo/metaver.htm
kdv
Дата: 03.08.2012 13:13:52
если по ссылке непонятно, то вот проще:
ФБ сохраняет данные в том виде, в каком они были определены. Изменение типа столбца не меняет хранимое. Для изменения хранимого нужно сделать update, чтобы ФБ привел данные в соответствие новому формату.
Точно так же при добавлении столбца данные таблицы не меняются, и этого столбца в базе фактически нет. Он появится в записях на страницах БД только когда записи будут добавлены или обновлены.
Сегодня пятница!
Дата: 03.08.2012 13:33:46
То есть FB как бы проигнорировал то, что я сменил тип поля

я имел в виду не то что не изменились старые данные - тут понятно, что нужен UPDATE...
меня удивило то, что после смены типа поля новые записи вставляются по-старому!
kdv
Дата: 03.08.2012 13:38:05
Сегодня пятница!
после смены типа поля новые записи вставляются по-старому!

в смысле?
вы врете, вообще-то. если вы создаете столбец numeric любой разрядности и дробной части в 3 диалекте, то в таком столбце данные хранятся только в целочисленном типе, smallint, integer или bigint, и там не может быть появления никаких погрешностей, в принципе.
И если это был столбец float или double precision, а его поменяли на numeric и потом сделали столбцу update, то данные округлятся, и опять же, никаких погрешностей в обновленных данных тоже не будет.
вещественные числа - есть погрешности
целые числа - нет погрешностей
аминь.