Форум программистов
 
Расширенный поиск
Контакты: о проблемах с регистрацией, почтой и по другим вопросам пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

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

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



Ответ
 
Опции темы
Старый 05.01.2017, 20:08   #1
greendoom
Пользователь
 
Аватар для greendoom
 
Регистрация: 25.04.2010
Сообщений: 11
Репутация: 10
По умолчанию При выводе вещественной суммы в 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, 20:25   #2
type_Oleg
Профессионал
 
Аватар для type_Oleg
 
Регистрация: 02.03.2008
Адрес: Хазарский каганат
Сообщений: 2,203
Репутация: 1204
По умолчанию

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

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

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

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

Цитата:
Сообщение от greendoom Посмотреть сообщение
Куда эту строчку вставлять? При создании формы?
да. при запуске программы (ну, например, в процедуре OnCreate главной формы.
но это обеспечит Вам вывод значений в нужном формате.
а при вводе вещественных чисел рекомендуется заменять и точки и запятые на этот самый DecimalSeparator:
если есть в программе перевод из строки в число, конечно.
тогда перед StrToFloat(ss)
сделать
Код:

ss:=StringReplace(ss, '.', DecimalSeparator, []);
ss:=StringReplace(ss, ',', DecimalSeparator, []);
число := StrToFloat(ss);

// впрочем, try except в любом случае не помешает
Serge_Bliznykov вне форума   Ответить с цитированием
Старый 13.01.2017, 03:25   #7
northener
Профессионал
 
Регистрация: 15.07.2013
Сообщений: 1,254
Репутация: 300
По умолчанию

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

Цитата:
Сообщение от 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 в 08:18.
Heneken87 вне форума   Ответить с цитированием
Старый 13.01.2017, 12:46   #9
Serge_Bliznykov
МегаМодератор
СуперМодератор
 
Регистрация: 09.01.2008
Сообщений: 21,048
Репутация: 4789
По умолчанию

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

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

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

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



Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

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




01:18.


Powered by vBulletin® Version 3.8.8 Beta 2
Copyright ©2000 - 2017, Jelsoft Enterprises Ltd.

Покупайте на сайте www.skinon.ru уникальные чехлы и наклейки для телефонов.
таргетированный трафик


как улучшить посещаемость, а также решения по монетизации сайтов, видео и приложений

RusProfile.ru


Справочник российских юридических лиц и организаций.
Проекты отопления, пеллетные котлы, бойлеры, радиаторы
интернет магазин respective.ru