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 умножать не лучший способ, мож хранить все таки с точкой, а отображать уже с запятой, ато можно на че-то напороться, ведь заранее все ситуации не смоделируешь.
|
|
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 Мб мне кажется будет глюкавить |
|
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. Все прекрасно заработало. А от перебора я отказался. Уж больно замудрено, а так все намного просто. |
Так-то оно так, вот только не советовал бы я с деньгами так обращаться, используйте денежный тип, иначе рано или поздно возникнет ситуация, после которой мало не покажется, заранее всего не предусмотришь. Мудрено — да, но надежно, а это в отношении денег прежде всего, тем более работая в банке Вы должны это понимать, подойдите к главбуху и покажите, что Вы с деньгами делаете, я уверен, он Вас порвет на тряпки.
|
|