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

Вниз

Разрядность   Найти похожие ветки 

 
anatolyk ©   (2003-07-06 11:06) [0]

Привет всем!
Помоготе с такой штукой разобраться:
в поле таблицы MSSQL хранится значение, напр. 0,50625
при отображении его в DBGRIDe (ADOQuery - Datasource - DbGrid) оно округляется до 4 знаков.(?) А мне этого не надо.
Заранее спасибо за помощь.


 
Anatoly Podgoretsky ©   (2003-07-06 11:20) [1]

Если не надо, то измени DisplayFormat у поля


 
anatolyk ©   (2003-07-06 11:39) [2]

В гриде меняю формат на 0.00000, но знаки показываются, а округление все-равно происходит. Мне кажется, что надо что-то с запрсом делать.


 
sniknik ©   (2003-07-06 11:46) [3]

не всегда помогает, если тип поля NUMERIC(x,x) либо DECIMAL(x,x) то там каким то боком участвует в преобразовании тип currency у которого как раз 4 знака максимум в дробной части, делает усечение.
недавно подобный вопрос был, показалось интересным, разбирался. но там хотя бы полная инфа по полям и где в каком случае усекается была... здесь продположительно. т.е. если тип стоит double или похожий то явно DisplayFormat если NUMERIC то см.выше.
не нашол тот вопрос там подробно расписал :-(( насколько помню.

в общем три варианта (если мое предположение по типам верно), первое сменить тип поля в базе,
второе отключить BCD (EnableBCD=false) тогда в преобразовании участвует тип double и все разряды проходят (но естественно возникает опасность потери точности изза разрядной сетки),
третье делать преобразование в запросе (в строку к примеру), тогда разрядность сохранится точно (некое подобие BCD). ну или к double.


 
anatolyk ©   (2003-07-06 11:55) [4]

Поле в базе - Float, Length=8
А вот EnableBCD было True. Посмотрел - теперь 0.00025 не округлилось, а усеклось.
Попробую вар.3, хотя со стороны Borland (Inprise) это свинство.


 
sniknik ©   (2003-07-06 12:12) [5]

> хотя со стороны Borland (Inprise) это свинство.
ага а разрядная сетка свинство от интел, не могли ничего лутше придумать. ;о))

ты бы не наезжал понапрасну, у вего есть свои ограничения/недостатки просто потому что без них этого самого не было бы. в конце концов не в сказке живеш.
у тебя куча вариантов, поэксперементируй, повыбирай. тип на double поменяй посмотри что будет.


 
anatolyk ©   (2003-07-06 12:29) [6]

Ладно, не ругайся! Я раньше писал на Clarione, там такой фигни не было: Real всегда остается Real. А программер сам, когда нужно, округляет и усекает.


 
anatolyk ©   (2003-07-06 12:41) [7]

Кстати, о типе.
Из нецелочисленных (в MSSQL) есть Decimal, Float и Real. Со всеми та же беда. Я думаю, надо что-то делать в Delphi.

Передача строкой - некрасиво. Запрос на выбор 10 полей - читать замучаешься. Хотелось бы работать с конструкцией SELECT * ....


 
sniknik ©   (2003-07-06 12:58) [8]

> Со всеми та же беда
тогда единственное, гдето у тебя DisplayFormat ограничивающий стоил. по другому просто не бывает
у меня например с real до черт знает какого знака видит...
ну к примеру создаю таблицу
CREATE TABLE IDD (ID INT Identity(1,1), db Float)
ложу запись
INSERT INTO IDD (db) VALUES (0.1234567890123456789)
делаю селект
SELECT * FROM IDD
вижу в гриде "0.123456789012346"
т.е. полное что туда попало.


 
anatolyk ©   (2003-07-06 13:20) [9]

Заново все переделал - пошло. И DisplayFormet работает нормально. Всем спасибо.


 
Anatoly Podgoretsky ©   (2003-07-06 13:36) [10]

Значит дело не в бобине



Страницы: 1 вся ветка

Текущий архив: 2003.07.28;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.012 c
3-91681
Avreliy
2003-07-04 20:22
2003.07.28
Неправильная процедура.


3-91647
Genemy
2003-07-04 21:59
2003.07.28
Как повернуть отчет


4-91937
tovSuhov
2003-05-23 14:25
2003.07.28
Опять...Первый COM комом...


3-91691
Сергей Ч
2003-07-07 12:01
2003.07.28
Изменение хранимой процедуры


6-91790
Siemens
2003-05-22 13:12
2003.07.28
Как использовать МОДЕМ или Локалку