Экспертная система Delphi.int.ru

Сообщество программистов
Общение, помощь, обмен опытом

Логин:
Пароль:
Регистрация | Забыли пароль?

Delphi.int.ru Expert

Другие разделы портала

Переход к вопросу:

#   

Статистика за сегодня:  


Лучшие эксперты

Подробнее »



Вопрос # 5 016

/ вопрос решён /

Здравствуйте, эксперты!
столкнулся с такой проблемой: мне нужно чтобы в эдит вводилось число и если оно дробное то оно домнажалось до тех пор пока запятая не уйдёт. и результат выводится во втором едите, написал код но он не фурычит выручайте.

Приложение:
  1. unit Unit3;
  2.  
  3. interface
  4.  
  5. uses
  6. Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  7. Dialogs, StdCtrls;
  8.  
  9. type
  10. TForm3 = class(TForm)
  11. Edit1: TEdit;
  12. Edit2: TEdit;
  13. Button1: TButton;
  14. procedure Button1Click(Sender: TObject);
  15. procedure Button(Sender: TObject);
  16. private
  17. { Private declarations }
  18. public
  19. { Public declarations }
  20. end;
  21.  
  22. var
  23. Form3: TForm3;
  24. var
  25. c:variant;
  26.  
  27. implementation
  28.  
  29. {$R *.dfm}
  30.  
  31. procedure TForm3.Button1Click(Sender: TObject);
  32. begin
  33. c:=StrToFloat(Edit1.Text);
  34. if c mod 1 <> 0 then
  35. Button(Sender);
  36. Edit2.Text:=FloatToStr(c);
  37. end;
  38.  
  39. procedure TForm3.Button(Sender: TObject);
  40. begin
  41. c:=c*10;
  42. Button1Click(Sender);
  43. end;
  44.  
  45. end.


ierihon1 Вопрос решён, но можно продолжить его обсуждение в мини-форуме

Вопрос задал: ierihon1 (статус: 1-ый класс)
Вопрос отправлен: 12 февраля 2011, 19:49
Состояние вопроса: решён, ответов: 0.


Мини-форум вопроса

Всего сообщений: 11; последнее сообщение — 14 февраля 2011, 10:51; участников в обсуждении: 4.
toro1

toro1 (статус: Посетитель), 12 февраля 2011, 19:59 [#1]:

я такой же как ты, но понимаю что процедуру батон надо поставить впереди.
ierihon1

ierihon1 (статус: 1-ый класс), 12 февраля 2011, 20:01 [#2]:

toro1: не обязтельно. эти процедуры уже обьявлены в разделе Tipe. Так что ставить можно куда угодно.
ierihon1

ierihon1 (статус: 1-ый класс), 12 февраля 2011, 20:03 [#3]:

toro1: но на всякий случай всё равно проверил: та же шняга получается
ierihon1

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

ierihon1 (статус: 1-ый класс), 12 февраля 2011, 20:38 [#5]:

а ларчик просто открывался))

12 февраля 2011, 20:38: Статус вопроса изменён на решённый (изменил автор вопроса — ierihon1)

toro1

toro1 (статус: Посетитель), 12 февраля 2011, 20:58 [#6]:

ты понимаешь англллиский? в FAQ по делфи наприсано
variants can hold anything but structured types and pointers.
ierihon1

ierihon1 (статус: 1-ый класс), 12 февраля 2011, 21:02 [#7]:

toro1: у меня уже что то было наподобии но не могу вспомнить..
ierihon1

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

ierihon1 (статус: 1-ый класс), 14 февраля 2011, 07:27 [#10]:

Толяныч: ну настоящее значение этой проги сокращать простые дроби... ну то что я написал работает но не больше пяти знаков после запятой, потом начинаются загоны..
Вадим К

Вадим К (статус: Академик), 14 февраля 2011, 10:51 [#11]:

для сокращения простых дробей есть другой метод. куда проще и круче. Называется Алгоритм Евклида. (http://ru.wikipedia.org/wiki/Алгоритм_Евклида) и сокращать будет отлично. А метод, который Вы придумали работать адекватно не будет. Ну разве что на некоторых примерах.
Галочка "подтверждения прочтения" - вселенское зло.

Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.

Версия движка: 2.6+ (26.01.2011)
Текущее время: 22 февраля 2025, 11:52
Выполнено за 0.02 сек.