C++ Builder
| Главная | Уроки | Статьи | FAQ | Форум | Downloads | Литература | Ссылки | RXLib | Диски |

 
Запятая в парадоксе, как надо, помогите плиз
Paha
  Отправлено: 06.05.2004, 23:09


Не зарегистрирован







Люди такая проблема. Парадокс же не понимает запятую, а в банке ее как разделитель дробной части требует (т.е. копейки отделять). Так вот я и подумал, что если это число усножить на сто и занести в базу, в роде бы получается целочисленное значение и никакой проблемы с запятой, а потом смело при выводе в отчет дели на 100 и получаешь, что заносил в форме. Только какая то охинея получается. При переводе StrToFloat((Edit1->Text)*100), а потом FloatToStrF(<значение поля>/100,ffNumber,20,2) ахинея получается. Числа разные. Может кто уже с этим боролся, так подскажите плиз.
olegenty
Отправлено: 07.05.2004, 09:01


Ветеран

Группа: Модератор
Сообщений: 2412



а может не напрягаться этой фигнёй и региональные настройки конкретного компа выставить, а? очень иногда пользительно.

был у меня случай, пользователь установил у себя и разделитель целой и дробной части в "," и разделитель групп разрядов в ",", а потом спрашивает: какого х#я Excel некорректно пашет? пришлось объяснять, что всё дело в том, что нефиг руками лазить в такие дебри, где не знаешь, что этими руками делать...
Gedeon
Отправлено: 07.05.2004, 09:12


Ветеран

Группа: Модератор
Сообщений: 1742



Мне кажется на 100 умножать не лучший способ, мож хранить все таки с точкой, а отображать уже с запятой, ато можно на че-то напороться, ведь заранее все ситуации не смоделируешь. wink.gif
olegenty
Отправлено: 07.05.2004, 09:20


Ветеран

Группа: Модератор
Сообщений: 2412



не, не договоримся. региональные настройки настроить, и всё. и нечего изобретать велосипед.
Valdemar
Отправлено: 07.05.2004, 10:12


Мастер участка

Группа: Участник
Сообщений: 433



А почему бы не использовать в таблице денежный тип. Тогда даже "р." в коце дописывается.
Gedeon
Отправлено: 07.05.2004, 11:46


Ветеран

Группа: Модератор
Сообщений: 1742



QUOTE (olegenty @ 07/05/2004, 10:22)
не, не договоримся. региональные настройки настроить, и всё. и нечего изобретать велосипед.

Иногда это бывает просто не приемлемо ибо софт разный пишется разными людьми и из-за этого отказываться от привычной софтины или переписывать ее нет смысла, в свое время мне пришлось компонент написать, который не зависимо от нажатия . или , ставил установленный мною разделитель.
Gedeon
Отправлено: 07.05.2004, 11:57


Ветеран

Группа: Модератор
Сообщений: 1742



З.Ы. В свое время один очень хороший человек мне обьяснил: ТВОЯ ПРОГРАММА ДОЛЖНА РАБОТАТЬ НЕЗАВИСИМО ОТ ЛОКАЛИЗАЦИИ И РЕГИОНАЛЬНЫХ НАСТРОЕК ОПЕРАЦИОННОЙ СИСТЕМЫ, за что я ему очень благодарен, куча вопросов исчезает сама собой, хоть для этого и больше кода писать нужно.
Простой пример: Глав Бух привыкла работать ТАК и "НЕЧЕГО ТУТ ХОДИТЬ И РАССКАЗЫВАТЬ МНЕ КАК Я ДОЛЖНА РАБОТАТЬ ИЛИ ВЫ НЕ ХОТИТЕ РАБОТАТЬ САМИ ИЛИ НЕ УМЕЕТЕ, ТАК НЕЗАМЕНИМЫХ ЛЮДЕЙ НЕ БЫВАЕТ..." что тут можно возразить? Начальство всегда право, хотя они иногда и редкостные идиоты.
QUOTE

А почему бы не использовать в таблице денежный тип.

А вот это 100%.
Paha
  Отправлено: 07.05.2004, 12:45


Не зарегистрирован







Заранее спасибо. Так в том то и дело что точка нужна в платежке а так региональные настройки он будет выводить "р" или "грн" но опять же в пункте сумма это не приемлимо. Тут еще одна мысль пришла. Сформированную строку помещать в массив и потом по символам перебирать, а вот где найдется "." менять ее на "," но мне кажется, что это будет немного тормозит машину. Машина и так Р100 ОЗУ 32 Мб мне кажется будет глюкавить sad.gif
Gedeon
Отправлено: 07.05.2004, 13:14


Ветеран

Группа: Модератор
Сообщений: 1742



Перебирать строку не надо, заюзайте LastDelimeter, а потом замените.
olegenty
Отправлено: 07.05.2004, 13:29


Ветеран

Группа: Модератор
Сообщений: 2412



2Gedeon
да, твой вариант с принудительной расстановкой разделителей мне более других нравится, хотя, в этом случае, берёшь mask edit, хранишь — как строку, работаешь — как приспичит. и всё.
Admin
Отправлено: 11.05.2004, 08:23


Владимир

Группа: Администратор
Сообщений: 1190



В том компоненте, где вводите сумму, типа TEdit пишите:

CODE

//---------------------------------------------------------------------------
// запрещаем явно ошибочный ввод
void __fastcall TFMain::Edit1KeyPress(TObject *Sender, char &Key)
{
 if(Key == VK_BACK) return;
 if(Key == VK_RETURN){
    FindNextControl((TWinControl*)ActiveControl,true,true,false)->SetFocus();
   }

 if(!isdigit(Key) && Key != DecimalSeparator)  { Key=0; return; }
 if(Key == DecimalSeparator &&
    ((TEdit*)Sender)->Text.AnsiPos(AnsiString(DecimalSeparator))) { Key=0; return; }
}


Кстати, можете назначить этот 1 обработчик на несколько TEdit,
(если несколько окошек ввода сумм типа TEdit)

и для целых неотрицательных чисел:

CODE

// запрещаем явно ошибочный ввод
void __fastcall TFMain::Edit2KeyPress(TObject *Sender, char &Key)
{
 if(Key == VK_BACK || Key == VK_RETURN) return;
 if(!isdigit(Key))  { Key=0; return; }
}
//---------------------------------------------------------------------------

Paha
Отправлено: 12.05.2004, 10:47


Не зарегистрирован







Люди всем спасибо, поборол проблему все таки так. При заносе данных в таблицу я, поле выставил int, а потом значение умножал на 100, а потом когда отображал просто в тупую делил его на 100. Все прекрасно заработало. А от перебора я отказался. Уж больно замудрено, а так все намного просто.
Gedeon
Отправлено: 12.05.2004, 11:30


Ветеран

Группа: Модератор
Сообщений: 1742



QUOTE (Paha @ 12/05/2004, 11:49)
Люди всем спасибо, поборол проблему все таки так. При заносе данных в таблицу я, поле выставил int, а потом значение умножал на 100, а потом когда отображал просто в тупую делил его на 100. Все прекрасно заработало. А от перебора я отказался. Уж больно замудрено, а так все намного просто.

Так-то оно так, вот только не советовал бы я с деньгами так обращаться, используйте денежный тип, иначе рано или поздно возникнет ситуация, после которой мало не покажется, заранее всего не предусмотришь. Мудрено — да, но надежно, а это в отношении денег прежде всего, тем более работая в банке Вы должны это понимать, подойдите к главбуху и покажите, что Вы с деньгами делаете, я уверен, он Вас порвет на тряпки.

Вернуться в Работа с базами данных в C++Builder