Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Отображение числа в DBGrid, зафиксировать число знаков после запятой 
V
    Опции темы
Infector
Дата 26.12.2009, 13:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 298
Регистрация: 13.1.2008

Репутация: нет
Всего: 2



Проблемка такая: Имеется поле, которое должно отображать денежную сумму. 
При отображении конечные нули после запятой урезаются.

Например 23,52 отображает нормально
23,50 как 23,5
23.00 как 23

Каким образом задать формат отображения числа? 
PM MAIL   Вверх
mrbrooks
Дата 26.12.2009, 14:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


трололомен
****


Профиль
Группа: Завсегдатай
Сообщений: 4259
Регистрация: 4.10.2006
Где: Дол Гулдур

Репутация: 167
Всего: 306



Infector, настроить точность можно через TFloatField.

Хотя стоит уточнить - как именно происходит работа с БД (TXXXQuery, TXXXTable)?
PM MAIL   Вверх
Infector
Дата 26.12.2009, 14:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 298
Регистрация: 13.1.2008

Репутация: нет
Всего: 2



Query из BDE в режиме "прямого редактирования"
PM MAIL   Вверх
mrbrooks
Дата 26.12.2009, 14:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


трололомен
****


Профиль
Группа: Завсегдатай
Сообщений: 4259
Регистрация: 4.10.2006
Где: Дол Гулдур

Репутация: 167
Всего: 306



Infector, мда. насамом деле точность менять не очень удачная мысль - тогда срежутся остальные значения. На мой взгляд единственный выход - это форматирование данных поля при выводе в TDBGrid

Добавлено через 1 минуту и 44 секунды
Infector, посмотри в сторону события TDBGrid->OnDrawDataCell
PM MAIL   Вверх
artsb
Дата 26.12.2009, 14:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2280
Регистрация: 17.7.2007
Где: центр Вселенной

Репутация: 39
Всего: 64



Infector, у поля есть свойство DisplayFormat. В вашем случае делайте так: ##,###.00
Числа будут выглядеть так:
12 555,00
2 555,00
555,50
555,05
и т.д.

Добавлено через 4 минуты и 14 секунд
Забыл сказать как добраться до DisplayFormat. Двойной клик по Query1, в списке выбираете нужное поле и, собственно, найдёте его в инспекторе объектов.


--------------------
Чем отличается умный человек от мудрого?
Умный - выпутается из любой ситуации.
Мудрый - просто в неё не попадёт.
PM MAIL   Вверх
mrbrooks
Дата 26.12.2009, 15:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


трололомен
****


Профиль
Группа: Завсегдатай
Сообщений: 4259
Регистрация: 4.10.2006
Где: Дол Гулдур

Репутация: 167
Всего: 306




Цитата(artsb @  26.12.2009,  14:44 Найти цитируемый пост)
Infector, у поля есть свойство DisplayFormat. В вашем случае делайте так: ##,###.00

дык это и есть через TFloatField. Вообще честно говоря связка создания визардом TXXXField для TXXXQuery - не очень хорошее решение. А именно года надо выполнять агрегатные функции и т.п.
 
Другое дело - выходит что я не до конца понял до конца - нужно что бы нули отображались или нет?
PM MAIL   Вверх
Infector
Дата 26.12.2009, 19:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 298
Регистрация: 13.1.2008

Репутация: нет
Всего: 2



Нужно чтобы нули отображались, а они урезаются, если копеек нет или количество их кратно десяти....
Первым делом стал лазить по свойствам DBGrid, там не нашел ничего интересного, хотя возможно так смотрел...

DisplayFormat в TFloatField нашел, вроде срабатывает, точность не проверял (записи еще должны суммироваться)

Однако вылезает всязи с этим другая проблема: как список полей в Query создавать динамически? Дело в том, что Query->SQL формируется именно динамически и в начале работы программы пуст. К нему подключаются таблицы несколько отличных форматов, но одного содержимого.
Поэтому статически список полей создать не могу. Вернее создаю при заполненном "фиктивном" запросе, но периодически часть описанных полей становятся "лишними", о чем честно сообщает ошибка.


Цитата(mrbrooks @  26.12.2009,  14:08 Найти цитируемый пост)
 посмотри в сторону события TDBGrid->OnDrawDataCell

Мыслей нет если честно...
Что хоть примерно в обработчике писать?


Это сообщение отредактировал(а) Infector - 26.12.2009, 19:46
PM MAIL   Вверх
Нитонисе
Дата 26.12.2009, 20:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 917
Регистрация: 5.11.2009

Репутация: 2
Всего: 2



Поле, где хранятся эти данные в базе данных, должно быть строковым.
Заносить в него информацию так
Код

AnsiString Text = FloatToStrF(YourNumber,ffFixed,7,2);
Query1->Insert();
Query1->FieldByName("Number")->AsString = Text;
Query1->Post();

Читать информацию так.
Код

float Number;
AnsiString Text = Query1->FieldByName("Number")->AsString;
Number = StrToFloat(Text);

PM MAIL   Вверх
artsb
Дата 26.12.2009, 20:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2280
Регистрация: 17.7.2007
Где: центр Вселенной

Репутация: 39
Всего: 64



Цитата(Infector @  26.12.2009,  19:44 Найти цитируемый пост)
Что хоть примерно в обработчике писать?

mrbrooks имел ввиду, что округлять вручную и отрисовывать нужное значение самому.

Добавлено через 5 минут и 53 секунды
Цитата(Infector @  26.12.2009,  19:44 Найти цитируемый пост)
Однако вылезает всязи с этим другая проблема: как список полей в Query создавать динамически? Дело в том, что Query->SQL формируется именно динамически и в начале работы программы пуст. К нему подключаются таблицы несколько отличных форматов, но одного содержимого.
Поэтому статически список полей создать не могу. Вернее создаю при заполненном "фиктивном" запросе, но периодически часть описанных полей становятся "лишними", о чем честно сообщает ошибка.

ИМХО копать нужно в строну Query1->Fields->Add()

Это сообщение отредактировал(а) artsb - 26.12.2009, 20:39


--------------------
Чем отличается умный человек от мудрого?
Умный - выпутается из любой ситуации.
Мудрый - просто в неё не попадёт.
PM MAIL   Вверх
mrbrooks
Дата 26.12.2009, 20:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


трололомен
****


Профиль
Группа: Завсегдатай
Сообщений: 4259
Регистрация: 4.10.2006
Где: Дол Гулдур

Репутация: 167
Всего: 306



Цитата(Infector @  26.12.2009,  19:44 Найти цитируемый пост)
Мыслей нет если честно...
Что хоть примерно в обработчике писать?


камрад - я не правильно тебя понял - поэтому здесь тебе это не надо.
Цитата(Нитонисе @  26.12.2009,  20:04 Найти цитируемый пост)
Поле, где хранятся эти данные в базе данных, должно быть строковым.

это интересная мысль  smile 


Infector, 
собственно все что тебе нужно сказал и artsb, и Нитонисе. если все это объединить то:
Код

qTest->Close();
qTest->SQL->Clear();
qTest->SQL->Text = "select * from test;";
qTest->Open();
dynamic_cast<TFloatField *>(qTest->FieldByName("your_field"))->DisplayFormat = "#.00";

PM MAIL   Вверх
artsb
Дата 26.12.2009, 20:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2280
Регистрация: 17.7.2007
Где: центр Вселенной

Репутация: 39
Всего: 64



mrbrooks, ага

Это сообщение отредактировал(а) artsb - 26.12.2009, 20:52


--------------------
Чем отличается умный человек от мудрого?
Умный - выпутается из любой ситуации.
Мудрый - просто в неё не попадёт.
PM MAIL   Вверх
Infector
Дата 28.12.2009, 20:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 298
Регистрация: 13.1.2008

Репутация: нет
Всего: 2



Спасибо всем за помощь. Выкрутился с помощью DisplayFormat и приведения таблиц к "стандартному" виду перед открытием
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++ Builder"
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по С++ Builder обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Настоятельно рекомендуем заглянуть в DRKB (Delphi Russian Knowledge Base) - крупнейший в рунете сборник материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Rrader.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C++ Builder | Следующая тема »


 




[ Время генерации скрипта: 0.0539 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.