Экспертная система Delphi.int.ru

Сообщество программистов
Общение, помощь, обмен опытом

Логин:
Пароль:
Регистрация | Забыли пароль?

Delphi.int.ru Expert

Другие разделы портала

Переход к вопросу:

#   

Статистика за сегодня:  


Лучшие эксперты

Подробнее »



Вопрос # 513

/ вопрос открыт /

Здравствуйте, уважаемые эксперты! Как автоматически заменять в числах запятую на точку. Например 7,5 на 7.5

Usmonov Farrukh Faiziddinovich Вопрос ожидает решения (принимаются ответы, доступен мини-форум)

Вопрос задал: Usmonov Farrukh Faiziddinovich (статус: Посетитель)
Вопрос отправлен: 23 апреля 2007, 08:50
Состояние вопроса: открыт, ответов: 4.

Ответ #1. Отвечает эксперт: Иусов Сергей Ник.

Здравствуйте, Usmonov Farrukh Faiziddinovich!
Нечнем с того, что менять что-либо в числах скорее всего нельзя, менять можно только в строковом представлении чисел.
Для этого есть несколько путей:
1. Меняем региональные настройки системы (нежелательно)
2. Меняем значение переменной DecimalSeparator
3. Используем функцию StringReplace для замены "зяпятой" на "точку" (ну или наоборот) в уже представленным строкой числе.

Ответ отправил: Иусов Сергей Ник. (статус: 3-ий класс)
Время отправки: 23 апреля 2007, 09:42
Оценка за ответ: 4

Ответ #2. Отвечает эксперт: min@y™

Если эти числа ты выводишь на экран (на TLabel, TEdit или ещё куда), используя одну из функций преобразования "число --> строка", например FloatToStrF() или FormatFloat(), то проcто перед вызовом этой функции поставь DecimalSeparator:= '.';

Если же эти числа у тебя хранятся УЖЕ в текстовом виде, то поможет функция StringReplace().

Пример в приложении.

Приложение:
  1. program Project1;
  2.  
  3. {$APPTYPE CONSOLE}
  4.  
  5. uses
  6. SysUtils;
  7.  
  8. var
  9. S: string;
  10.  
  11. begin
  12.  
  13. DecimalSeparator:= ',';
  14. S:= FormatFloat('0.00', 2.75);
  15. WriteLn(S);
  16.  
  17. DecimalSeparator:= '.';
  18. S:= FormatFloat('0.00', 2.75);
  19. WriteLn(S);
  20.  
  21.  
  22. S:= StringReplace('2,75 7,5 6,12342, 3,1415926535897932384626433832795',
  23. ',', '.', [rfReplaceAll]);
  24. WriteLn(S);
  25.  
  26. ReadLn;
  27. end.


Ответ отправил: min@y™ (статус: Доктор наук)
Время отправки: 23 апреля 2007, 09:43
Оценка за ответ: 5

Ответ #3. Отвечает эксперт: Вадим К

Для вывода с точкой есть класная процедура, но о ней сейчас почему то не вспоминают. Она с точкой всегда даёт
s:string;
r:real;
str(s,r:4:2)
первая переменная - куда результат положить. вторая - собственно, откуда число брать. 4 - сколько под число отвести знаков (учитывая минус перед отрицательными, 2 - сколько для дробной части.

Играться с DecimalSeparator не рекомендую, так как когда пользователь меняет региональные настройки и в этот момент твоя прога работает могут быть разные побочные эффекты.
Если организуем ввод, то тут для Edit'а лучще перехватывать KeyPress и подменять запятую на точку.

Ответ отправил: Вадим К (статус: Академик)
Время отправки: 23 апреля 2007, 11:21
Оценка за ответ: 4

Ответ #4. Отвечает эксперт: Djec

Ко всему прочему могу добавить что при вводе, например, в Edit, менять автоматически запятую на точку можно в обработчике события OnKeyPress. Просто написать
If Key = ','
then
Key := '.'

Ответ отправил: Djec (статус: 1-ый класс)
Время отправки: 23 апреля 2007, 21:50
Оценка за ответ: 4


Мини-форум вопроса

Мини-форум пуст.

Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.

Версия движка: 2.6+ (26.01.2011)
Текущее время: 22 февраля 2025, 11:36
Выполнено за 0.02 сек.