|
Вопрос # 5 016/ вопрос решён / |
|
Здравствуйте, эксперты!
столкнулся с такой проблемой: мне нужно чтобы в эдит вводилось число и если оно дробное то оно домнажалось до тех пор пока запятая не уйдёт. и результат выводится во втором едите, написал код но он не фурычит выручайте.
Приложение: Переключить в обычный режим- unit Unit3;
-
- interface
-
- uses
- Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
- Dialogs, StdCtrls;
-
- type
- TForm3 = class(TForm)
- Edit1: TEdit;
- Edit2: TEdit;
- Button1: TButton;
- procedure Button1Click(Sender: TObject);
- procedure Button(Sender: TObject);
- private
- { Private declarations }
- public
- { Public declarations }
- end;
-
- var
- Form3: TForm3;
- var
- c:variant;
-
- implementation
-
- {$R *.dfm}
-
- procedure TForm3.Button1Click(Sender: TObject);
- begin
- c:=StrToFloat(Edit1.Text);
- if c mod 1 <> 0 then
- Button(Sender);
- Edit2.Text:=FloatToStr(c);
- end;
-
- procedure TForm3.Button(Sender: TObject);
- begin
- c:=c*10;
- Button1Click(Sender);
- end;
-
- end.
 |
Вопрос задал: ierihon1 (статус: 1-ый класс)
Вопрос отправлен: 12 февраля 2011, 19:49
Состояние вопроса: решён, ответов: 0.
|
Мини-форум вопроса
Всего сообщений: 11; последнее сообщение — 14 февраля 2011, 10:51; участников в обсуждении: 4.
|
toro1 (статус: Посетитель), 12 февраля 2011, 19:59 [#1]:
я такой же как ты, но понимаю что процедуру батон надо поставить впереди.
|
|
ierihon1 (статус: 1-ый класс), 12 февраля 2011, 20:01 [#2]:
toro1: не обязтельно. эти процедуры уже обьявлены в разделе Tipe. Так что ставить можно куда угодно.
|
|
ierihon1 (статус: 1-ый класс), 12 февраля 2011, 20:03 [#3]:
toro1: но на всякий случай всё равно проверил: та же шняга получается
|
|
ierihon1 (статус: 1-ый класс), 12 февраля 2011, 20:38 [#4]:
procedure TForm3.Button1Click(Sender: TObject);
begin
c:=StrToFloat(Edit1.Text);
while Frac(c) <> 0 do
begin
c:=c*10;
end;
Edit2.Text:=FloatToStr(c);
end;
|
|
ierihon1 (статус: 1-ый класс), 12 февраля 2011, 20:38 [#5]:
а ларчик просто открывался))
|
12 февраля 2011, 20:38: Статус вопроса изменён на решённый (изменил автор вопроса — ierihon1)
|
toro1 (статус: Посетитель), 12 февраля 2011, 20:58 [#6]:
ты понимаешь англллиский? в FAQ по делфи наприсано
variants can hold anything but structured types and pointers.
|
|
ierihon1 (статус: 1-ый класс), 12 февраля 2011, 21:02 [#7]:
toro1: у меня уже что то было наподобии но не могу вспомнить..
|
|
ierihon1 (статус: 1-ый класс), 12 февраля 2011, 21:03 [#8]:
варианта может содержать ничего, кроме структурированных типов и указателей.
вот дословный перевод
|
|
Толяныч (статус: 4-ый класс), 13 февраля 2011, 12:32 [#9]:
Я так думаю, что поскольку float числа в памяти представляются не так, как мы их видим в символьном виде, то могут быть неожиданности. Например, мы пишем 5.3, а число в памяти выглядеть как 5.299999999..., и множить придется очень долго. Я бы написал так :
while Frac(Abs(c)) > FlConst do ....
где FlConst - константа с плавающей точкой достаточно малой величины, определющая точность.
Возможен и другой вариант : парсить входную строку, чтобы узнать, сколько у нее знаков после точки , конечно , если ввод в естественной, а не экспоненциальной форме.
|
|
ierihon1 (статус: 1-ый класс), 14 февраля 2011, 07:27 [#10]:
Толяныч: ну настоящее значение этой проги сокращать простые дроби... ну то что я написал работает но не больше пяти знаков после запятой, потом начинаются загоны..
|
|
Вадим К (статус: Академик), 14 февраля 2011, 10:51 [#11]:
для сокращения простых дробей есть другой метод. куда проще и круче. Называется Алгоритм Евклида. (http://ru.wikipedia.org/wiki/Алгоритм_Евклида) и сокращать будет отлично. А метод, который Вы придумали работать адекватно не будет. Ну разве что на некоторых примерах.
Галочка "подтверждения прочтения" - вселенское зло.
|
Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.
|