![]() |
|
|
Регистрация | << Правила форума >> | 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; |
#7
|
|||
|
|||
![]() Цитата:
В этом случае всегда выдает значение "1", т.е вводится первая цифра двузначного числа и срабатывает первая формула.... |
#8
|
|||
|
|||
![]() Значит значение i всегда находится в диапазоне 0..10, ищи ошибку в коде, возможно у тебя где-то переписывается значение переменной или еще что-то...
|
#9
|
|||
|
|||
![]() Вычисляется среднее арифметическое из 3 уже средних значений, каждое из которых формата:
Код:
Label1.Caption:='Среднее значение: '+Floattostr(trunc((i+j)/2*100)/100) Можно ли Вычислить среднее значение таких label, не разделяя их на 2 части, 1 текст и другую цифровое значение? Проблема в 'Среднее значение: ' ... |
#10
|
||||
|
||||
![]() среднее всех label:
функцией Pos вырезай "Среднее значение: ", потом StrToFloat что0-то типа: PHP код:
знаете почему внизу эскалатора бабка в будке сидит? она там педальки крутит и лесенка едет! Последний раз редактировалось SerginhoLD, 12.11.2010 в 11:05. |