Форум: "Начинающим";
Текущий архив: 2009.05.24;
Скачать: [xml.tar.bz2];
ВнизВопрос от новичка. Деление двух чисел. Найти похожие ветки
← →
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;
Скачать: [xml.tar.bz2];
Память: 0.49 MB
Время: 0.005 c