Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 05.01.2017, 19:08   #1
greendoom
Пользователь
 
Аватар для greendoom
 
Регистрация: 25.04.2010
Сообщений: 11
По умолчанию При выводе вещественной суммы в Label запятая заменяется на точку.

Проблема такова. Dbgrid + adotable + datasource. Есть столбец с числами с запятой, два знака после нее. Суммирую столбец. Сумму кидаю в лейбл. У меня на компе отображается сумма с запятой, два знака после, все как положено. На любом другом, где нет делфи, отображается сумма с точкой, два знака после. В чем косяк, подвох, не могу понять? Мне надо запятая чтобы была, а не точка. Пробовал и FloatToStr и FloatToStrF. Результат одинаковый. Вот часть кода:
Код:
var 
c,sum:Double;   // для подсчета суммы в архиве
begin
//подсчет суммы по столбцу
ADOTable3.First;
sum:=0;
While not ADOTable3.Eof do
begin
c:=ADOTable3['Сумма_операции'];
sum:=c+sum;
ADOTable3.Next;
end;
Label57.Caption:=FloatToStr(sum);
end;
greendoom вне форума Ответить с цитированием
Старый 05.01.2017, 19:25   #2
type_Oleg
Старожил
 
Аватар для type_Oleg
 
Регистрация: 02.03.2008
Сообщений: 2,499
По умолчанию

Может быть, это поможет - http://www.programmersforum.ru/showthread.php?t=302395
type_Oleg вне форума Ответить с цитированием
Старый 05.01.2017, 19:38   #3
greendoom
Пользователь
 
Аватар для greendoom
 
Регистрация: 25.04.2010
Сообщений: 11
По умолчанию

Цитата:
Сообщение от type_Oleg Посмотреть сообщение
Может быть, это поможет - http://www.programmersforum.ru/showthread.php?t=302395
жесть)) вы правы оказались)) самое интересное, открыл же эту тему, она немного раньше моей была)) но не дочитал до конца)))) тока начал и закинул))) вот же в чем собака зарыта!)) а то у меня пашет, а на компе другом нет!)) в общем, спасибо тебе дружище!)) все именно так!)))
greendoom вне форума Ответить с цитированием
Старый 12.01.2017, 11:53   #4
Arigato
Высокая репутация
СуперМодератор
 
Аватар для Arigato
 
Регистрация: 27.07.2008
Сообщений: 15,544
По умолчанию

DecimalSeparator := ',';
И при преобразовании из строки в число на всякий случай заменять току на запятую.
Arigato вне форума Ответить с цитированием
Старый 12.01.2017, 17:54   #5
greendoom
Пользователь
 
Аватар для greendoom
 
Регистрация: 25.04.2010
Сообщений: 11
По умолчанию

Цитата:
Сообщение от Arigato Посмотреть сообщение
DecimalSeparator := ',';
И при преобразовании из строки в число на всякий случай заменять току на запятую.
Куда эту строчку вставлять? При создании формы? А пример замены символа есть? Я так понял, при считывании надо. Или выводе?
greendoom вне форума Ответить с цитированием
Старый 13.01.2017, 01:22   #6
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Цитата:
Сообщение от greendoom Посмотреть сообщение
Куда эту строчку вставлять? При создании формы?
да. при запуске программы (ну, например, в процедуре OnCreate главной формы.
но это обеспечит Вам вывод значений в нужном формате.
а при вводе вещественных чисел рекомендуется заменять и точки и запятые на этот самый DecimalSeparator:
если есть в программе перевод из строки в число, конечно.
тогда перед StrToFloat(ss)
сделать
Код:
ss:=StringReplace(ss, '.', DecimalSeparator, []);
ss:=StringReplace(ss, ',', DecimalSeparator, []);
число := StrToFloat(ss);
// впрочем, try except в любом случае не помешает
Serge_Bliznykov вне форума Ответить с цитированием
Старый 13.01.2017, 02:25   #7
northener
ПШП
Участник клуба
 
Регистрация: 15.07.2013
Сообщений: 1,869
По умолчанию

Цитата:
Сообщение от Serge_Bliznykov Посмотреть сообщение
да. при запуске программы (ну, например, в процедуре OnCreate главной формы.
В современных версиях Дельфи не скомпилируется.
В более старых версиях за это нужно отрубать руки и головы!
Т.к. там это глобальная настройка, влияющая на все прочие программы.
northener вне форума Ответить с цитированием
Старый 13.01.2017, 07:15   #8
Heneken87
Форумчанин
 
Регистрация: 27.04.2012
Сообщений: 219
По умолчанию

Цитата:
Сообщение от northener Посмотреть сообщение
Т.к. там это глобальная настройка, влияющая на все прочие программы.
А за что руки то рубить?Serge_Bliznykov не заменяет глобальные настройки. Руки рубить надо тем, кто под нужды программы изменяет эти настройки,а не читает.
И код будет работать, у меня XE7, прекрасно понимает строчку
Код:
 if FormatSettings.DecimalSeparator<>',' then begin  add_errors(9); er:=True;end;
А вот за подобный код я бы тоже оторвал программисту все что торчит:
Код:
 if FormatSettings.DecimalSeparator<>',' then FormatSettings.DecimalSeparator:=',';
Пишу много и развернуто

Последний раз редактировалось Heneken87; 13.01.2017 в 07:18.
Heneken87 вне форума Ответить с цитированием
Старый 13.01.2017, 11:46   #9
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Цитата:
Сообщение от northener Посмотреть сообщение
Т.к. там это глобальная настройка, влияющая на все прочие программы.
что за ересь? DecimalSeparator в Delphi (старой) - это исключительно внутренняя переменная. Ни на какие другие программы это никак не влияет и влиять не может.
Вы с реестром или функциями WinAPI не путаете?

по поводу изменения настроек десятичного разделителя в программе (отличного от системного разделителя).
Тут, конечно, спорный момент.
Но, на мой взгляд, я не вижу никакого криминала, если программа игнорирует настройки винды и определяет свой разделитель.
Ну, например, никого же не смущает, что в программе на ЯВУ десятичная точка - это всегда ".", а не то, что назначил пользователь в региональных настройках винды?

впрочем, это уже выходит за рамки вопроса почему "При выводе вещественной суммы в Label запятая заменяется на точку".
Хотя Delphi в данном случае поступает именно так - как в винде настроено, так она и выводит. И почему-то TC это не нравится
Serge_Bliznykov вне форума Ответить с цитированием
Старый 13.01.2017, 17:08   #10
greendoom
Пользователь
 
Аватар для greendoom
 
Регистрация: 25.04.2010
Сообщений: 11
По умолчанию

Цитата:
Сообщение от Serge_Bliznykov Посмотреть сообщение
впрочем, это уже выходит за рамки вопроса почему "При выводе вещественной суммы в Label запятая заменяется на точку".
Хотя Delphi в данном случае поступает именно так - как в винде настроено, так она и выводит. И почему-то TC это не нравится
неа, не нравится)) потому что я не мог понять, что за ерунда творится))) ко всему прочему винда еще и не сохраняет те настройки, что я указал)) если я меняю запятую на точку в настройках, то после ребута системы настройки скидываются все равно на точку. это блин как??? следовательно, очень хорошо, что на этом моя тема не исчерпала себя. и тут развернулась дискуссия. видимо придется делать обходом в самом коде. и да, делфи у меня седьмое.
greendoom вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Ошибка при выводе Pasha_Sh Общие вопросы Delphi 7 27.03.2015 19:52
Ошибка при выводе trad Общие вопросы C/C++ 7 15.01.2011 11:32
tchart - Как при наведении курсора на определенную точку сериэса узнать точку наведения и отобразить её xaero93 Помощь студентам 0 22.04.2009 19:28
При расположении Label на компонентах, место под Label, не реагирует на событие onClick. NavigatorNeba Компоненты Delphi 3 15.11.2008 19:56