![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Вопрос от новичка. Деление двух чисел. [D7]
Dmitrijan © (2009-04-06 17:52:00)Возник вопрос. Нужно разделить целое число на число с плавающей точкой (которое надо задать в эдите).И в результате деления получить
число тоже с точкой.Например:(15/0.8=18.75).
Вот код програмки:unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;
type
TForm1 = class(TForm)
Edit1: TEdit;
Label1: TLabel;
Button1: TButton;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.Button1Click(Sender: TObject);
var
a,b,c:Real;
begin
a:=15;
b:=StrToFloat(Edit1.Text);
c:=a / b;
Label1.Caption:=FloatToStr(c);
end;
end.
Подскажите пожалуйста, что надо исправить в коде,
чтоб можно было делить не только на целые числа,
но и на числа с точкой тоже.
Заранее благодарю!
Ega23 (2009-04-06 20:25:00) [1]
> и ничего не будет.)
Хм.. Действительно...
Но в любом случае так делать не стоит. Можно в бесконечный цикл уйти.
AlexDan (2009-04-06 19:53:00) [2]и ничего не будет.)
Ega23 (2009-04-06 19:52:00) [3]
procedure TForm1.Edit1Change(Sender: TObject);
begin
if length(Edit1.text)=0 then
begin
chb:=0;
Edit1.text:='';
end
else
begin
chb:=StrToFloat(stringreplace(Edit1.text,'.',',',[rfReplaceAll]));
end;
end;
Теперь очисти Edit1 бэкспейсом
Anatoly Podgoretsky (2009-04-06 19:38:00) [4]
> я думаю ему это явно не нужно!
Так сможешь думать только до тех пор пока не потребуется ввести именно в этом формате, тогда что будешь в затылке чесать?
Не говоря уже об случае, когда разделитель будет далеко не запятая.
AlexDan (2009-04-06 19:31:00) [5]Наверно часа три моей головной боли в процессе обучения, дарю,подушка:
procedure TForm1.Edit1Change(Sender: TObject);
begin
if length(Edit1.text)=0 then
begin
chb:=0;
Edit1.text:='';
end
else
begin
chb:=StrToFloat(stringreplace(Edit1.text,'.',',',[rfReplaceAll]));
end;
end;
Dmitrijan (2009-04-06 18:32:00) [6]Спасибо Ega23 так и сделаю:
> 1. Навесить дуракозащиту. В Edit1 можно ввести всякое
> 2. Разобраться с DecimalSeparator
> 3. Разобраться с числами с плавающей точкой.
Ega23 (2009-04-06 18:27:00) [7]
> просто для себя решил с числами поработать.
1. Навесить дуракозащиту. В Edit1 можно ввести всякое
2. Разобраться с DecimalSeparator
3. Разобраться с числами с плавающей точкой.
Dmitrijan (2009-04-06 18:22:00) [8]Не это я не для препода ,просто для себя решил с числами поработать.
В качестве примера решил программу составит которая рубли переводит в
доллары вот и все. Просто программирование хочу освоить для себя. А пока я в нем полный ноль.
Женя (2009-04-06 18:13:00) [9]Удалено модератором
Женя (2009-04-06 18:12:00) [10]
> Это ты так думаешь. А у преподавателя может быть другое
> мнение.
это да!
там по обстоятельствам
Dmitrijan (2009-04-06 18:11:00) [11]Женя благодарю. Буду дальше над числами эксперементировать.
AndreyV (2009-04-06 18:10:00) [12]> [5] Женя (06.04.09 18:05)
>
> > -123,456e+10
>
> я думаю ему это явно не нужно!
Откуда знаешь?
А если такое будет введено1,2,3,
Проверять лучше при выходе из Edit. Например
StrToFloatDef
Ega23 (2009-04-06 18:09:00) [13]
> разделителем служит запятая
разделителем служит DecimalSeparator
> я думаю ему это явно не нужно!
Это ты так думаешь. А у преподавателя может быть другое мнение.
Женя (2009-04-06 18:05:00) [14]
> -123,456e+10
я думаю ему это явно не нужно!
AndreyV (2009-04-06 18:03:00) [15]> [2] Женя (06.04.09 18:00)
> разделителем служит запятая
В российской локали.
> вот и сделай так чтобы в edit1 можно было вводить только
> цифры и зпт
-123,456e+10
Женя (2009-04-06 18:02:00) [16]вот нашел на исходниках.ру
procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char);
begin
// Key — символ, соответствующий нажатой клавише.
// Если символ недопустимый, то процедура заменяет его
// на символ с кодом 0. В результате этого символ в поле
// редактирования не появляется, и у пользователя создается
// впечатление, что программа не реагирует на нажатие некоторых
// клавиш.
case Key of
'0'..'9': ; // цифра
#8 : ; // клавиша <Back Space>
#13 : Edit2.SetFocus ; // клавиша <Enter>, переводим фокус на второй Edit
// остальные символы — запрещены
else Key :=Chr(0); // символ не отображать
end;
end;
Женя (2009-04-06 18:00:00) [17]разделителем служит запятая
вот и сделай так чтобы в edit1 можно было вводить только цифры и зпт
есть где-то в нете
Ega23 (2009-04-06 17:55:00) [18]
> что надо исправить в коде,
В частном случае - ничего.
В общем случае - дуракозащиту + проверку DecimalSeparator поставить.