Форум программистов, компьютерный форум, киберфорум
Delphi для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.79/29: Рейтинг темы: голосов - 29, средняя оценка - 4.79
0 / 0 / 1
Регистрация: 11.04.2012
Сообщений: 91
1

Прировнять при вводе точку к запятой

23.04.2012, 17:15. Показов 5877. Ответов 16
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Есть эдиты через которые вводим дробные числа, задача в том чтобы сделать так чтобы вводить можно было и 0,5 и 0.5) ибо когда вводишь через точку он выдает valid floating point. Почитал про Decimal Separator, но как то не оч понял про него. Подскажите как это можно реализовать.


Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
procedure TForm1.Button1Click(Sender: TObject);
begin
  if CheckBox1.Checked=true
    then
begin
 
 a:=StrToFloat(abt.Text);
 b:=175;
 c:=StrToFloat(cbt.Text);
 e:=StrToFloat(ebt.Text);
 if ((a>e) or (c>b)) then
  begin
    ShowMessage('Неверные данные (1 октава): Минимальная полоса пропускания прибора превышает ширину октавной полосы, либо величина напряжения шума превышает величину суммарного напряжения смеси сигнала и шума.');
    exit
  end;
 if ((a<=e) or (c<=b)) then
 d:=a*Sqrt(c/b);
 f:=Sqrt(Sqr(e)-Sqr(a));
 g:=f/d;
 Compl1.Caption:=FloatToStr(round(g*1000)/1000);
 if g>0.3 then Label1.Caption:=('Не соответствеут нормам');
 if g<=0.3 then Label1.Caption:=('Соответствеут нормам');
  end;
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
23.04.2012, 17:15
Ответы с готовыми решениями:

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

Написание события для замены запятой на точку в QLineEdit при вводе чисел
Привет всем,нужна помощь с написанием события для замены запятой на точку в qlineedit при вводе...

Заменить при вводе запятую на точку
Как в WPF заменить запятую на точку сразу же после ввода в текстбокс запятой? В Windows Forms я...

При вводе любого числа добавляется ноль с запятой
при вводе любого числа добавляется &quot;0,&quot;. например, если ввести 6, то получится &quot;60,&quot; в textBox и...

16
148 / 118 / 37
Регистрация: 27.10.2011
Сообщений: 690
23.04.2012, 17:22 2
Вот такой метод подойдет, если только в едите записано именно число, т.е. нет букв, только цифры и одна запятая(или точка):

Delphi
1
2
3
4
5
6
7
8
9
10
var str:string;
     i:integer;
     n:extended;
begin
  str:=edit1.text;
  for i:=1 to length(str) do
    if str[i]=',' then str[i]:='.';
 
  n:=strtofloat(str);
end;
Не проверял, но по идее должно работать. На выходе в числе N будет содержаться число из edit1
0
0 / 0 / 1
Регистрация: 11.04.2012
Сообщений: 91
23.04.2012, 18:12  [ТС] 3
Попробовал В этом случает он и на 0.5 и на 0,5 выводит valid floating point...
0
Почетный модератор
64300 / 47595 / 32743
Регистрация: 18.05.2008
Сообщений: 115,181
23.04.2012, 18:22 4
Вот процедура ввода вещественных чисел, если что не нужно, выкиньте.

Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char);
begin
case Key of
  #8,'0'..'9' :  ; // цифры и <Back Space>
 
       '.',',': // разделитель целой и дробной частей числа
                begin
                  if Key <> DecimalSeparator then
                  Key := DecimalSeparator; // заменим разделитель на допустимый
                  if Pos(DecimalSeparator,Edit1.Text) <> 0
                  then Key := Chr(0); // запрет ввода второго разделителя
                end;
           '-':    // минус можно ввести только первым символом,
                // т.е. когда ячейка пустая
                if Length(Edit1.Text) <> 0
                      then Key := Chr(0);
          else   // остальные символы запрещены
               key := Chr(0);
 
    end;
end;
1
1085 / 571 / 79
Регистрация: 07.04.2011
Сообщений: 971
Записей в блоге: 2
23.04.2012, 18:33 5
Цитата Сообщение от flouwjke Посмотреть сообщение
Попробовал В этом случает он и на 0.5 и на 0,5 выводит valid floating point...
поменяй
Delphi
1
if str[i]=',' then str[i]:='.';
на
Delphi
1
if str[i]='.' then str[i]:=',';
1
0 / 0 / 1
Регистрация: 11.04.2012
Сообщений: 91
23.04.2012, 19:36  [ТС] 6
Проблема в том что я совсем недавно познакомился с програмированием и вышеуказанную "процедуру ввода вещественных чисел" видел уже но не смог разобраться в ней что и куда Так же как советовал antikiler поменял местами if str[i]='' но все вернулось в начало ) с запятой работает с точкой выдает ошибку

Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
procedure TForm1.Button1Click(Sender: TObject);
var
    str:string;
     k:integer;
     n:extended;
 
begin
     begin
  str:=abt.text;
  for k:=1 to length(str) do
    if str[k]='.' then str[k]:=',';
 
  n:=strtofloat(str);
end;
  if CheckBox1.Checked=true
    then
begin
 
 a:=StrToFloat(abt.Text);
 b:=175;
 c:=StrToFloat(cbt.Text);
 e:=StrToFloat(ebt.Text);
 if ((a>e) or (c>b)) then
  begin
    ShowMessage('Неверные данные (1 октава): Минимальная полоса пропускания прибора превышает ширину октавной полосы, либо величина напряжения шума превышает величину суммарного напряжения смеси сигнала и шума.');
    exit
  end;
 if ((a<=e) or (c<=b)) then
 d:=a*Sqrt(c/b);
 f:=Sqrt(Sqr(e)-Sqr(a));
 g:=f/d;
 Compl1.Caption:=FloatToStr(round(g*1000)/1000);
 if g>0.3 then Label1.Caption:=('Не соответствеут нормам');
 if g<=0.3 then Label1.Caption:=('Соответствеут нормам');
  end;
0
Почетный модератор
64300 / 47595 / 32743
Регистрация: 18.05.2008
Сообщений: 115,181
23.04.2012, 19:39 7
flouwjke, Ну неужели так трудно просто создать процедуру, ту что я привел? Не понимаете, не переделывайте в ней ничего, она позволит Вам ввести вещественные числа без ошибок. Если у Вас несколько Эдитов для ввода, создайте ее для каждого Эдита.
1
0 / 0 / 1
Регистрация: 11.04.2012
Сообщений: 91
23.04.2012, 20:05  [ТС] 8
Всем пасиба все работает
0
Почетный модератор
64300 / 47595 / 32743
Регистрация: 18.05.2008
Сообщений: 115,181
23.04.2012, 20:09 9
Это неправда, 100 раз этой процедурой пользовался.
0
1085 / 571 / 79
Регистрация: 07.04.2011
Сообщений: 971
Записей в блоге: 2
23.04.2012, 20:10 10
сделай так
Delphi
1
2
3
4
5
6
7
8
9
10
11
...................
твой код
..................
 
a:=StrToFloat(StringReplace(abt.text,'.',',',[]));
c:=StrToFloat(StringReplace(cbt.text,'.',',',[]));
e:=StrToFloat(StringReplace(ebt.text,'.',',',[]));
 
...................
твой код
..................
1
0 / 0 / 1
Регистрация: 11.04.2012
Сообщений: 91
23.04.2012, 20:11  [ТС] 11
Та уже разобрался я косяк был 1 строчку выпилил сча вернул все атлична
0
Почетный модератор
64300 / 47595 / 32743
Регистрация: 18.05.2008
Сообщений: 115,181
23.04.2012, 20:12 12
antikiler_, Так можно менять точку на запятую, ну или запятую на точку, а у меня на установленный в системе разделитель, гадать не нужно.
0
1085 / 571 / 79
Регистрация: 07.04.2011
Сообщений: 971
Записей в блоге: 2
23.04.2012, 20:16 13
Puporev,
Спору нет, твоя универсальней.
0
148 / 118 / 37
Регистрация: 27.10.2011
Сообщений: 690
24.04.2012, 09:34 14
Странно как то, я щас использовал свой код, только переделал его как сказал antikiller, и у меня все работает отлично....
0
Почетный модератор
64300 / 47595 / 32743
Регистрация: 18.05.2008
Сообщений: 115,181
24.04.2012, 09:36 15
Цитата Сообщение от Nikitko_Cent Посмотреть сообщение
и у меня все работает отлично....
Это потому что в системе выставлен разделитель запятая.
0
148 / 118 / 37
Регистрация: 27.10.2011
Сообщений: 690
24.04.2012, 09:37 16
Цитата Сообщение от Puporev Посмотреть сообщение
Это потому что в системе выставлен разделитель запятая.
Ааа.... ясно
0
13104 / 5885 / 1706
Регистрация: 19.09.2009
Сообщений: 8,808
24.04.2012, 10:54 17
Я когда-то тоже публиковал код на эту тему: StrToFloatSafe().
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
//Преобразует строку в вещественное число. При этом, разделителем целой и дробной
//частей числа может быть любой знак из множества D.
function StrToFloatSafe(const aStr : String) : Extended;
const
  //Множество возможных разделителей целой и дробной части в записи числа.
  D = ['.', ','];
var
  S : String;
  i : Integer;
begin
  S := aStr;
  for i := 1 to Length(S) do begin
    if S[i] in D then begin
      S[i] := DecimalSeparator;
      Break;
    end;
  end;
  Result := StrToFloat(S);
end;
0
24.04.2012, 10:54
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
24.04.2012, 10:54
Помогаю со студенческими работами здесь

При вводе запятой в поле Edit дает ошибку
Мне нужно запретить ввод в edit всего кроме чисел и запятой, вот код unit Unit1; interface ...

При вводе в TextBox точку заменить на запятую
Доброго времени суток Необходимо при вводе в textBox точки замена её на запятую. При чём, если...

При вводе в textbox числа с плавающей запятой выбивает ошибку
когда ввожу в textbox(&quot;расход&quot;или &quot;доллар&quot;) число с плав.запятой выбивает ошибку. Помогите плз,...

Замена запятой на точку при копировании в текстовое поле?
Всем доброго дня! Есть программка которая считает бух. суммы автоматом, при копировании суммы...

В введенной строке заменить каждую запятую и точку на точку с запятой
В введенной строке заменить каждую запятую и точку на точку с запятой и вывести полученную строку.

Ошибка при компиляции: требует точку с запятой после скобки
Вот код: #include &lt;iostream&gt; // Для возможности использования cin / cout #include &lt;fstream&gt; //...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
17
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru