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

Вниз

Маленькая проблемка - Grid округляет автоматом   Найти похожие ветки 

 
StenKz ©   (2002-12-10 14:18) [0]

Есть Grid, есть Dbase IV, поле number, 6 знаков до и 4 после запятой...

Так вот в при вводе в грид происходит автоматическое округление...

А надо чтобы не округляло...


 
Anatoly Podgoretsky ©   (2002-12-10 14:25) [1]

Не использовать Numeric это с фиксированноей запятой, а по вопросу ты хочешь с плавающей.


 
StenKz ©   (2002-12-10 14:52) [2]

А Numeric в другом месте через DBEdit работает, не округляет...
А что тогда использовать?


 
sniknik ©   (2002-12-10 15:02) [3]

попробуй к примеру TNumericField.DisplayFormat настроить.


 
Fiend ©   (2002-12-10 16:02) [4]

запретите использование BCD, это спасёт вас однозначно


 
Anatoly Podgoretsky ©   (2002-12-10 16:04) [5]

Ты бы для приличия указал бы исходные данные, как округляет, насройки свойств TField, хоть это как минимум


 
Stenkz ©   (2002-12-10 16:09) [6]

Пробовал криво работает... Надо написать последний ноль чтобы она не кругляла..


 
Fiend ©   (2002-12-10 16:10) [7]

То Stenkz
Тебе же говорят, запрети использование BCD, спасёт по любому!!!!!!!!!


 
Stenkz ©   (2002-12-10 16:17) [8]

То Fiend ©
А что такое BCD :)?


To Anatoly Podgoretsky ©
Работает так Пишем 156,555 получаем 156,56...
А надо 155,555


 
Fiend ©   (2002-12-10 16:25) [9]

Ты через что обращаешься к таблицам?
ADO или BDE?


 
Anatoly Podgoretsky ©   (2002-12-10 16:26) [10]

А формат поляв таблице, а настройка DisplayFormat и где жто видим в гриде или в таблице.
А если надо то почему не настроишь DisplayFormat, но если поле Nx.2 то откуда взяться третьему знаку.

По конкреннее.


 
Stenkz ©   (2002-12-10 16:26) [11]

To Anatoly Podgoretsky ©
настройки Tfield стандартные для Numeric


 
Stenkz ©   (2002-12-10 16:30) [12]

To Anatoly Podgoretsky ©
Настраивал DisplayFormat, но всёравно округляет последнюю цифру..

To Fiend © обращаюсь через BDE


 
РВА   (2002-12-10 16:30) [13]

Свойство DisplFormat для данного поля внести 0.0000 (или #0.00##)
Для Grid должно работать


 
Anatoly Podgoretsky ©   (2002-12-10 16:35) [14]

Как настраивал, не играй в прятки


 
sniknik ©   (2002-12-10 16:38) [15]

ветка живое воплощение
http://delphi.mastak.ru/cgi-bin/forum.pl?look=1&id=1039441512&n=3
:-))

Anatoly ну че ты выеживаешся? нет чтобы сразу правильно и грамотно ответить! :о))))))


 
Fiend ©   (2002-12-10 16:39) [16]

To Stenkz
через SQL Explorer или BDE Administrator в настройках алиаса через который вы подключаетесь к БД, установите опцию Enable BCD в true. перезапустите программу


 
MsGuns ©   (2002-12-10 20:46) [17]

Ну ведь сказали же ! (Anatoly Podgoretsky © (10.12.02 16:26)
И причем здесь BCD ? Вы еще в конфигуратор полезьте и ввалите там 6 знаков после точки !

Надо задать 2 свойства у TField: DisplayFormat (0.000) и EditFormat (#.000##), а вообще настоятельно рекомендую перед постом ОКРУГЛЯТЬ введенные (а особенно вычисленные) числа

a := ROUND(a*1000)/1000; (10 в степени сколько надо точность)

Помогает ОДНОЗНАЧНО избежать больших СУММАРНЫХ (по колонке) погрешностей.

Использование BCD тоже, конечно, вариант, но есть траблы с интерпретацией сумм по таким колонкам в запросах (для BDE по крайней мере), да и места на диске они занимают больше.


 
Anatoly Podgoretsky ©   (2002-12-10 20:51) [18]

Второй не обязательно, а вот первое свойство ну никак не выбить из него, такое впечатление, что это нужно нам, а не ему.


 
Fiend ©   (2002-12-11 09:53) [19]

То MsGuns
а BCD, увжаемый MsGuns, тут при том шо вот у меня аналогичнейшая проблема была. Причём не просто там отображалось не правильно, а даже когда брал значение поля для внутреннего вычисления в клиенте (Query.FieldByName("Field1").AsFloat), то оно мне давало округлённый вариант. И шо я тока не делал, и форматировал у Query поля и много еще чего перепробовал. ничего не спасало. а вот использование BCD помогло, потому говорю не голословно. И учтите пожалуста, шо не отвергаю других вариантов решения. Просто сообщаю человеку, шо эту проблему у себя решил так то, и пусть он попробует.

С уважением, Fiend


 
Stenkz ©   (2002-12-11 14:07) [20]

То Fiend ©

Попробовал, но теперь BDE материться шо актуал small integer...
Это мне все таблицы перелапачивать ?


 
sniknik ©   (2002-12-11 15:37) [21]

разберись с DisplayFormat, а то как то странно получается у всех работает у тебя нет.

не можеш сам то ответь to Anatoly Podgoretsky © (10.12.02 16:35).
Хотя по мне и так дали информации предостаточно.


 
Stenkz ©   (2002-12-12 13:19) [22]

To sniknik ©
DisplayFormat насколько я понял управляет отображением числа :)
И он отображает например 156,560 а не как вводилось 156,555 :(
Он тут помойму не причём.

Так вот я выставил DisplayFormat - 0.000
EditFormat - #.000#

ИИИ всеравно округляет до двух знаков после запятой...
И происходит это именно в Гриде...


 
mike-d ©   (2002-12-12 13:49) [23]

Создай новый проект, брось туда TTable, TDataSource, TDBGrid. Подключи к этой гармони свою таблу. Никаких установок для полей не делай. Оживи таблицу и посмотри прямо в дизайне на результат вывода. Отвечай - что видишь по проблемному полю?


 
MsGuns ©   (2002-12-12 15:30) [24]

Если в поле число 1.111, в св-ве DisplayFormat указано "0.00##", нет никаких обработчиков типа OnCalcFields, OnGetText и им подобным, то дело в БД, точнее в физическом формате возвращаемых датасету данных. Кстати, а как ты знаешь, что там 3 знака после точки ? Только потому, что в контрол при вводе числа три раза нажималась (и высвечивалась) единица после точки ?


 
Anatoly Podgoretsky ©   (2002-12-12 17:13) [25]

Ну он в чамом начале утвержает, что у него N10.4


 
MsGuns ©   (2002-12-12 17:33) [26]

>Anatoly Podgoretsky © (12.12.02 17:13)
>Ну он в чамом начале утвержает, что у него N10.4

Но он даже не сообщает каким движком (компонентами) пользуется.
Если, к примеру, в качестве НД я использую SELECT ... CAST(... AS DECIMAL(12,2)), то я и получу этот самый эффект округления.




 
StenKz ©   (2002-12-12 17:51) [27]

To MsGuns ©
Anatoly Podgoretsky © прав у меня действительно N6,4.
Никаких OnCalcFields и OnGetText для этой таблицы не предусмотренно, но для других ьаблиц это присутствует.

To mike-d © - завтра на работе твоё предложение опробую.



 
Stenkz ©   (2002-12-15 15:37) [28]

To mike-d © опробовал твоё предложение...
Эффект такой же....


 
sniknik ©   (2002-12-15 16:51) [29]

а в самой таблице нортоном посмотреть?

p.s. тебе дают советы исходя из данных которые ты даеш. вернее из тебя их давят по капле. хочеш решить. описывай ВСЕ и подробно. Нет, ну на нет и суда нет.

p.p.s.
mike-d © (12.12.02 13:49) насколько я понял хотел выяснить что у тебя в чистом виде, без программных установок, а не предлагал решение, "Эффект такой же....", а собственно какой?.


 
Anatoly Podgoretsky ©   (2002-12-15 17:18) [30]

Что в конце видно в Database Desktop как в структуре таблицы, так и в гриде.
К тому же ты противоречишь, сначала N10.4 теперь говоришь N6,4
Проверь в конце все таки с помощью Database Desktop, может окажется, что Nx.2 и подробности с тебя вообще клещами вытягивать приходится


 
mike-d ©   (2002-12-15 17:30) [31]

Да, действительно, что-то мутно...
А вообще прав Anatoly Podgoretsky © (15.12.02 17:18) - все указывает на то, что после запятой всего два знака. Может смотрит не ту таблицу с которой работает? Меня как-то от усталости также переклинило - правлю таблу в Desktop"е, а в проге ни фига!


 
mike-d ©   (2002-12-15 17:55) [32]

И вдогонку - попробовал у себя смоделировать такую табл.
В DBGrid все как учили - те самые несчастные 4 после запятой (вводишь 5 - округляет до 4), а в Database Desktop ввожу данные - округляет до двух знаков (но хранит как вводили). Почему - не знаю и разбираться лень, не работаю я с BDE давно и навсегда.


 
StenKz ©   (2002-12-15 18:28) [33]

То Anatoly Podgoretsky © Уважаемый - посмотри на первое сообщение N6,4 - (Есть Grid, есть Dbase IV, поле number, 6 знаков до и 4 после запятой...) ..... Это уже придирки тововарищи знатоки и ... лень. :(

To mike-d ©
Эффект тот - что округляет :)
Смотрю я на ту таблицу и там 4 после запятой.
Хранит так, как и округляет. опробавано на 6 делфию смотрел Database Desktop///

To sniknik ©
BDE
Type - Standart
Driver - Dbase
Enable BCD - False
Path - локальный



 
Anatoly Podgoretsky ©   (2002-12-15 18:38) [34]

Ну а структура таблицы, конкретно нерабочии поля


 
Stenkz ©   (2002-12-15 19:11) [35]

Таблица DBASE IV

Val - C/3
Opis - C/50
Kurs - N/6/4

индексы Val, Opis
лангвидж "ASCII" ANSI




 
Anatoly Podgoretsky ©   (2002-12-15 19:19) [36]

Stenkz © (10.12.02 16:17)
To Anatoly Podgoretsky ©
Работает так Пишем 156,555 получаем 156,56...
А надо 155,555

Ну вот спустя 5 дней запросов, наконец получен ответ по действительной структуре таблицы. Чего же хочешь, у тебя поле N6.4 - это один знак до, точка и четыре знака после точки, в скмме 6, ну как туда поместится 155,xxxx
Вот тебе ихи и округли и самое плохое, что еперь данные в этом поле не соответствует формату, если тебе надо 6 до и 4 после то будь добр объявить поле так N11.4 (6 + "." + 4)


 
Stenkz ©   (2002-12-15 19:53) [37]

To Anatoly Podgoretsky ©

Ёпрст...
Вери санькс...

А для Float данная методика построения числа тоже действует?

Если не трудно чем флоат лучше или хуже Numeric. Или точнее где что лучше применять.. Мне надо большую точность вычислений.


 
Anatoly Podgoretsky ©   (2002-12-15 20:06) [38]

Float нато и Float что точка плавает, не рекомендую вообще использовать этот тип, если только не нужно работать с большими числами. Больше 10^18


 
Stenkz ©   (2002-12-16 17:12) [39]

Вери вери санькс :)



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

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

Наверх




Память: 0.56 MB
Время: 0.012 c
14-25020
Ketmar
2002-12-19 12:37
2003.01.09
господа, никто не встречал реализацию LISP а на OP?


14-25065
Top Gun
2002-12-19 19:55
2003.01.09
Тормоза в Мафии


14-25033
Val
2002-12-19 20:22
2003.01.09
Тест на умопомешательство :)


14-25036
vajo
2002-12-20 08:57
2003.01.09
Регистрация действий на компьютере


3-24793
menart
2002-12-16 15:10
2003.01.09
IBASE и 1С