Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2009.05.24;
Скачать: CL | DM;

Вниз

Вопрос от новичка. Деление двух чисел.   Найти похожие ветки 

 
Dmitrijan ©   (2009-04-06 17:52) [0]

Возник вопрос. Нужно разделить целое число на число с плавающей точкой (которое надо задать в эдите).И в результате деления получить
число тоже с точкой.Например:(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 17:55) [1]


> что надо исправить в коде,


В частном случае - ничего.
В общем случае - дуракозащиту + проверку DecimalSeparator поставить.


 
Женя   (2009-04-06 18:00) [2]

разделителем служит запятая
вот и сделай так чтобы в edit1 можно было вводить только цифры и зпт
есть где-то в нете


 
Женя   (2009-04-06 18:02) [3]

вот нашел на исходниках.ру
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;


 
AndreyV ©   (2009-04-06 18:03) [4]

> [2] Женя   (06.04.09 18:00)
> разделителем служит запятая

В российской локали.

> вот и сделай так чтобы в edit1 можно было вводить только
> цифры и зпт

-123,456e+10


 
Женя   (2009-04-06 18:05) [5]


> -123,456e+10

я думаю ему это явно не нужно!


 
Ega23 ©   (2009-04-06 18:09) [6]


> разделителем служит запятая


разделителем служит DecimalSeparator


> я думаю ему это явно не нужно!


Это ты так думаешь. А у преподавателя может быть другое мнение.


 
AndreyV ©   (2009-04-06 18:10) [7]

> [5] Женя   (06.04.09 18:05)
>
> > -123,456e+10
>
> я думаю ему это явно не нужно!

Откуда знаешь?

А если такое будет введено1,2,3,
Проверять лучше при выходе из Edit. Например
StrToFloatDef


 
Dmitrijan ©   (2009-04-06 18:11) [8]

Женя благодарю. Буду дальше над числами эксперементировать.


 
Женя   (2009-04-06 18:12) [9]


> Это ты так думаешь. А у преподавателя может быть другое
> мнение.

это да!
там по обстоятельствам


 
Женя   (2009-04-06 18:13) [10]

Удалено модератором


 
Dmitrijan ©   (2009-04-06 18:22) [11]

Не это я не для препода ,просто для себя решил с числами поработать.
В качестве примера решил программу составит которая рубли переводит в
доллары вот и все. Просто программирование хочу освоить для себя. А пока я в нем полный ноль.


 
Ega23 ©   (2009-04-06 18:27) [12]


> просто для себя решил с числами поработать.


1. Навесить дуракозащиту. В Edit1 можно ввести всякое
2. Разобраться с DecimalSeparator
3. Разобраться с числами с плавающей точкой.


 
Dmitrijan ©   (2009-04-06 18:32) [13]

Спасибо Ega23 так и сделаю:

> 1. Навесить дуракозащиту. В Edit1 можно ввести всякое
> 2. Разобраться с DecimalSeparator
> 3. Разобраться с числами с плавающей точкой.


 
AlexDan ©   (2009-04-06 19:31) [14]

Наверно часа три моей головной боли в процессе обучения, дарю,подушка:
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;


 
Anatoly Podgoretsky ©   (2009-04-06 19:38) [15]


> я думаю ему это явно не нужно!

Так сможешь думать только до тех пор пока не потребуется ввести именно в этом формате, тогда что будешь в затылке чесать?
Не говоря уже об случае, когда разделитель будет далеко не запятая.


 
Ega23 ©   (2009-04-06 19:52) [16]

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 бэкспейсом


 
AlexDan ©   (2009-04-06 19:53) [17]

и ничего не будет.)


 
Ega23 ©   (2009-04-06 20:25) [18]


> и ничего не будет.)


Хм.. Действительно...
Но в любом случае так делать не стоит. Можно в бесконечный цикл уйти.



Страницы: 1 вся ветка

Текущий архив: 2009.05.24;
Скачать: CL | DM;

Наверх




Память: 0.51 MB
Время: 0.014 c
11-1180543802
Vladimir Kladov
2007-05-30 20:50
2009.05.24
MHIPEdit + Tab


15-1237411802
Юрий
2009-03-19 00:30
2009.05.24
С днем рождения ! 19 марта 2009 четверг


2-1239286238
Ivan8511
2009-04-09 18:10
2009.05.24
Просмотр отчета QuickReport


2-1238466628
8shar
2009-03-31 06:30
2009.05.24
ID скрытого процесса


15-1237488048
KSergey
2009-03-19 21:40
2009.05.24
Запуск программы под другой уетной записью