![]() |
|
|
|||||||
| Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
|
Опции темы | Поиск в этой теме | Опции просмотра |
|
|
|
#1
|
|||
|
|||
|
День добрый.
Подскажите, пожалуйста, где ошибка в вычислении среднего арифметического, и как округлить результат до 2-х знаков после запятой. Компилится но выдает ошибку при введении числа:Exception class EConvertError with message ''''' is not a valid integer value'. Спасибо Код:
procedure TForm1.Edit1Change(Sender: TObject);
var
i,sum,kol: integer;
sr:real;
begin
sum:=Strtoint(Edit1.Text)+Strtoint(Edit2.Text);
kol:=2;
sr:=sum/kol;
Label1.Caption:=Floattostr(sr);
end; |
|
#2
|
|||
|
|||
|
Ругается т.к. в Edit попадает значение которе нельзя преобразовать, использкуй TryStrToInt. Округлить можно умножением на 10^n и отбрасыванием остального, либо подключить модуль Math и использлвать RoundTo.
Код:
procedure TForm1.Edit1Change(Sender: TObject); var i,j: integer; begin if TryStrToInt(Edit1.Text, i) and TryStrToInt(Edit2.Text, j) then Label1.Caption:=Floattostr(trunc((i+j)/2*100)/100) else Label1.Caption:='error'; end; |
|
#3
|
|||
|
|||
|
Сделал так:
Код:
procedure TForm1.Edit1Change(Sender: TObject); var i,j: integer; begin if TryStrToInt(Edit1.Text, i) and TryStrToInt(Edit2.Text, j) then Label1.Caption:=Floattostr(trunc((i+j)/2*100)/100) else Label1.Caption:=Floattostr(trunc((i+j)/1*100)/100); end; procedure TForm1.Edit2Change(Sender: TObject); var i,j: integer; begin if TryStrToInt(Edit1.Text, i) and TryStrToInt(Edit2.Text, j) then Label1.Caption:=Floattostr(trunc((i+j)/2*100)/100) else Label1.Caption:=Floattostr(trunc((i+j)/1*100)/100); end; Теперь при вводе в Edit1 и пустом Edit2 показывает правильный результат, но при вводе в Edit2 выдает ошибку результата, непонятное число... Есть вычисления с 4-5 полями(для этого и округление до сотых), при этом, если поле или поля пустые, не должны участвовать... Подкажите, пожалуйста, как реализовать это. Спасибо |
|
#4
|
||||
|
||||
|
Очисти переменные...
Код:
i:=0; j:=0; |
|
#5
|
|||
|
|||
|
Исправил, во втором onchange поменял местами Edit1 и Edit2, теперь работает.
Еще вопрос: Как ограничить написание значения в Edit, скажем до 30? Подскажите, пожалуйста, как при значении, скажем Edit1 от 1 до 10 выдать Label2.Caption один, при вводе другого промежутка значения, соответственно другой результат? При попытке записать так: Код:
for i := 0 to 10 do Label2.Caption:= '1'; for i := 11 to 20 do Label2.Caption:= '2'; Спасибо Последний раз редактировалось doctordradd, 09.11.2010 в 18:49. |
|
#6
|
|||
|
|||
|
1) Проверяй в OnChange значение
Код:
TryStrToInt(Edit1.Text, i); if i>30 then Edit1.Text:='30'; Код:
case i of
0..10: Label2.Caption:='1';
11..20: Label2.Caption:='2';
else Label2.Caption:='3';
end; |