![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
5 знаков после запятой в DBGrid [D7, Win2k]
wild_arg © (2006-03-23 11:23:00)Подскажите, как вывести 5 знаков после запятой в DBGrid? Провайдер - ADO
sniknik (2006-03-24 18:30:00) [1]> А вот эта конструкция, гениальная по своей простоте, которая по вашему мнению отвечает на все поставленные вопросы:
эта гениальная конструкция (кстати спасибо комплимент), если посмотреть в первоисточник ([15]) давалось для проверки, что с другим типом таких проблем не будет.
> Это решение со стороны базы данных, замечательное решение, а что, если эту хранимую процедуру нельзя менять, что тогда,
> повеситься?
как один из вариантов... впрочем давались и другие варианты, правда не оформленные в код и потому видимо проигнорированные. тот же DisplayFormat примененный к полю оригиналукоторое тоже (если присмотрется к процедуре) присутствует... имеет тип флоат и поэтому не преобразовывается через каренси.
потом (мой вариант [17]) вытаскивать значение самому из оригинального обьекта, чем не вариант? правда он чуть посложнее первого.
> ... А если нужно больше знаков? Помогайте... Или как обычно, "нет уж, пусть сам "мается""?
именно! если нет нормального обьяснения зачем это нужно, зачем мне "париться"? для меня то эта задача интереса не представляет.
Vladix (2006-03-24 17:30:00) [2]Я так понимаю, что форумы не для того предназначены, чтобы кого-то втоптать в грязь, И не просто так люди за помощью обращаются. Это моя точка зрения, безо всяких "пофигу на внимание". У меня была подобная ситуация, пришлось перелопатить часть VCL и часть MSDN, только потому, что никто не желает опуститься до того, чтобы ткнуть носом в уже решенную проблему. Или всем нужно изобретать велосипед?
>при явном приведении поля к типу currency (для дельфей), где именно >только 4...
>давай помогай, вместо дискусий... слабо??? ;)
Приведение, которое осуществляется в дебрях VCL само по себе нельзя назвать явным. Мы знаем, что тип decimal по умолчанию переводится в Дельфевское Currency, и что этот тип имеет четыре знака после запятой. А если нужно больше знаков? Помогайте... Или как обычно, "нет уж, пусть сам "мается""?
А вот эта конструкция, гениальная по своей простоте, которая по вашему мнению отвечает на все поставленные вопросы:
> CAST(convert(decimal(18,6), fValue) AS VarChar(18))
Это решение со стороны базы данных, замечательное решение, а что, если эту хранимую процедуру нельзя менять, что тогда, повеситься?
sniknik (2006-03-24 17:26:00) [3]> действительно помогло :)
помогло ????
ВРЕШ!
без смены типа, а именно в том варианте что у тебя описан, тем что посоветовано в [18] это невозможно. (вот если ты наоборотубрал EnableBCD в false, то... а в общем см. [19])
wild_arg (2006-03-24 16:54:00) [4]Да все уже решилось, Vladix - спасибо, действительно помогло :) Прекращайте споры.
sniknik (2006-03-24 11:05:00) [5]> Не понимаю, зачем тут нужны дискуссии?
вот не понимаеш, а тоже "встреваеш", смысл?
> Кучу слов и ноль дельных советов, хотя все укладывается в одну строчку.
ой сомневаюсь... ;)
> For numeric values with more than 4digits...
а теперь внимание вопрос [0]
> как вывести 5знаков после запятой в DBGrid?
при явном приведении поля к типу currency (для дельфей), где именно только 4...
давай помогай, вместо дискусий... слабо??? ;)
"дискусия" же, до этого, была на самом деле первоначально попыткой "выудить" исходные данные, а после попыткой обьяснить в чем его неправота.
потом смысла в действиях явтора действительно нет, ну или есть какойнибудь тайный ну тогда путь обьяснит в чем он, ведь он пытается занять мое(и не только) время на решение своихпроблем (явно высосанных из пальца).
а если отбросить все "придури" в реализации то ответ(помощь) уже звучал в > Johnmen © (23.03.06 12:57) [3]
и он его даже использовал... но как и остальное через задницу, и все при полном "понимании" (см. [16]). и после этого говориш не нужно дискусий (обьяснений), а что тогда? готовый код? так если даже (невероятный случай!) я его дам, то он его исковеркает или применит опять в неподходящем месте с неподходящими типами (и говорить "вот какой "нехороший" код мне на мастерах дали...") нет уж, пусть сам "мается".
пофигу на внимание.
Vladix (2006-03-24 09:52:00) [6]Не понимаю, зачем тут нужны дискуссии? Человек просил помочь решить проблему, связанную с выводом в DBGrid четырех знаков после запятой вместо требуемых пяти без изменения запроса к БД (ну мало ли, может он эти результаты еще в Enterprise Manager смотрит), а вы ему что? Кучу слов и ноль дельных советов, хотя все укладывается в одну строчку.
Говорить, что "не вижу смысла" или еще что-то подобное не поможет решить проблему. А вот то место в справке, где все четко описано.
For numeric values with more than 4 digits to the right of the decimal place, use of TFloatField is generally better. This is because TBCDField uses the currency data type that has a fixed scale of 4 decimal places.
Спасибо за внимание
sniknik (2006-03-23 21:15:00) [7]> EnableBCD := False;
это как раз поведение при установленом (преобразование через currency), а если наоборот убрать то тип обратно к исходному float приведется (fValue - float)... (и смысл этого convert-а?)
Vladix (2006-03-23 17:59:00) [8]У датасета, к которому привязан DBGrid нужно просто установить свойство
EnableBCD := False;
sniknik (2006-03-23 16:50:00) [9]> это я понял :)
раз понял значит и что делать должен догадаться.
> поменять где-нить можно кол-во знаков?
в типе? как ты себе это представляеш?
раз используется значит уже ничего не сделаеш (если только генофонд не править на другой тип...). но это не значит что ничего нельзя сделать для отображения... бери значение до преобразований, из оригинального ADO-шного обьекта (recordset) а не дельфевской оберки, и преобразовывай к нужному виду сам.
правда я не вижу во все этом смысла... ну вот зачем менять тип с float на decimal (увеличивать рекордсет на дополнительное поле...)? придурь? ну это без меня.
> а про вариант в [15] я говорил в [5]
покажи пальцем, пересмотрел так и не увидел где. (ты и код то положил в [12], а в [5] говориш к нему добавление было? оригинально)
wild_arg (2006-03-23 16:30:00) [10]2sniknik [14]
это я понял :) поменять где-нить можно кол-во знаков?
а про вариант в [15] я говорил в [5]
sniknik (2006-03-23 15:52:00) [11]для проверки можно заменить указанную строчку на
CAST(convert(decimal(18,6), fValue) AS VarChar(18))
например
sniknik (2006-03-23 15:49:00) [12]> Где засада?
сдесь
> convert(decimal(18,6),fValue)
получаемый тип в дельфях передается через currency у которого 4 знака после запятой максимум.
Костян (2006-03-23 15:29:00) [13]Да ты просто пелотка
wild_arg (2006-03-23 15:21:00) [14]есть таблица Test1 (это я опять таки для облегчения примера сейчас собрал [MS SQL Server2k + Delphi7])
1)Итак, Test1. В ней поле - fValue float. В одной из записей таблицы хранится значение поля 0.00001
2)Есть хранимая процедура (копирую код):
CREATE PROCEDURE test_SelectAll AS
select
Test1.fValue,
convert(decimal(18,6),fValue)
from
Test1
т.е. она возвращает все поля, плюс поле fValue конвертит в формат 18.6. Выполняя, эту процедуру в SQL Query Analizer - получаем (опять копирую):
1.0000000000000001E-5 .000010
3)
Делаем в Дельфях овый проект, куда суем ADOQuery, DataSet, DBGrid. Все прописываем и устанавливаем у Query свойство Active в True.
Поле fValue = 1E-5, поле COLUMN1 = 0
Где засада?
2sniknikшутиш Ь:) на всякий случай
sniknik (2006-03-23 15:04:00) [15]> мало исходных данных...
шутиш? да их вообще нет. ;) только рисунок последствий, а это не данные.
Johnmen (2006-03-23 15:01:00) [16]
> wild_arg © (23.03.06 14:56) [9]
Я не считаю, что ты тупишь.
Если ссылки не помогают, значит дело в другом. А в чём - лично я теперь не могу уловить, мало исходных данных...
wild_arg (2006-03-23 14:56:00) [17]2Johnmen
и? я знаю, как представленны вещественные числа в памяти. проблема не в этом. если бы у меня хранилось 0.00001, а он мне выдавал бы 0.00001000000234234 - я бы ничего не сказал, потому как сталкивался уже с этим и решал. здесь же, несколько иного рода трабл...
Ты если считаешь, что я туплю - так просто укажи на это, скажи вот тут и тут у тебя не так, а должно быть вот так вот. я, конечно, понимаю, что это надо быть для этого филантропом, но форумы для этого и придумали. :) а то можно дать ссылку http:// . Наверняка там что-нибудь, где-нибудь про это есть.
Johnmen (2006-03-23 14:32:00) [18]http://www.delphikingdom.com/asp/viewitem.asp?catalogid=374
wild_arg (2006-03-23 14:07:00) [19]на представленном скриншоте нет ни одной строки кода. Это я собрал просто для демонстрации.
Anatoly Podgoretsky (2006-03-23 13:55:00) [20]У тебя ошибка в программе.