Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Вопрос от новичка. Деление двух чисел. [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 поставить.


Наверх

Титульная страница Поиск, карта сайта Написать письмо