| 
| 
 | Вопрос # 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);beginc:=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/Алгоритм_Евклида) и сокращать будет отлично. А метод, который Вы придумали работать адекватно не будет. Ну разве что на некоторых примерах. Галочка "подтверждения прочтения" - вселенское зло. |  Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте. |