Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 13.02.2008, 14:14   #1
bles
Пользователь
 
Регистрация: 29.01.2008
Сообщений: 26
По умолчанию Как округлять числа до целых и как оставить два знака после запятой.

У меня несколько вопросов...
Я все не могу понять как округлять числа до целых и как оставить два знака после запятой. Как сделать так что бы на pagecontrol1 была видна только одна tabsheet1 при открытии программы, а tabsheet2 появлялась при нажатии на какую нибудь кнопку.
И еще как сделать так что бы в поле edit можно было ввести только цифры от 0 до 9 и запятую для десятичных чисел.
Покажите пожалуйста на примере как числа округлять хотя бы на таком до целых и сотых :
Edit1.text:=FloatToStr(StrToFloat(E dit2.Text) / StrToFloat(Edit3/Text);
bles вне форума Ответить с цитированием
Старый 13.02.2008, 14:35   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
как округлять числа до целых и как оставить два знака после запятой.
RoundTo смотри в справочник там даже пример есть

Цитата:
Как сделать так что бы на pagecontrol1 была видна только одна tabsheet1 при открытии программы, а tabsheet2 появлялась при нажатии на какую нибудь кнопку.
Динамически создать вторую закладку
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 13.02.2008, 15:24   #3
puporev
Старожил
 
Регистрация: 13.10.2007
Сообщений: 2,740
По умолчанию

Напиши такую процедуру: (#8 нужна, если неправильно введешь цифру или знак, еще нужен минус для ввода отрицательных чисел).
Код:
procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char);
begin
case Key of
  #8,'0'..'9' :  ; // цифры и <Back Space>
       '.',',':    // разделитель целой и дробной частей числа
                begin
                  if Key <> DecimalSeparator then
                  Key := DecimalSeparator; // заменим разделитель на допустимый
                  if Pos(DecimalSeparator,Edit1.text) <> 0
                  then Key := Chr(0); // запрет ввода второго разделителя
                end;
           '-':    // минус можно ввести только первым символом,
                // т.е. когда ячейка пустая
                if Length(Edit1.text) <> 0
                      then Key := Chr(0);
             else   // остальные символы запрещены
               key := Chr(0);
    end;
end;
Форматированный вывод можно делать так: FloattostrF(x,ffFixed,a,b), где a - обшее количество знаков, b - после запятой. Как в Паскале.
puporev вне форума Ответить с цитированием
Старый 13.02.2008, 20:07   #4
bles
Пользователь
 
Регистрация: 29.01.2008
Сообщений: 26
По умолчанию

Цитата:
Сообщение от Stilet Посмотреть сообщение
Динамически создать вторую закладку
У меня они уже должны быть созданы, там много вычисления и на каждой вкладке вычисляется определенная формула. А просто их невидимыми можно сделать до того как кнопка нажата, если можно с примером буду очень благодарен.

Цитата:
Сообщение от puporev Посмотреть сообщение
Форматированный вывод можно делать так: FloattostrF(x,ffFixed,a,b), где a - обшее количество знаков, b - после запятой. Как в Паскале.
Спасибо огромное за процедуру. А можешь на примере показать на каком ни будь где происходят действия с edit насчет вывода целых и сотых частей числа. Я просто не совсем понимаю куда писать ffFixed. Edit1.text:=FloatToStr((StrToFloat( Edit2.Text)/StrToFloat(Edit3/Text)),ffFixed,5,2);
так до сотых ?
bles вне форума Ответить с цитированием
Старый 13.02.2008, 20:35   #5
puporev
Старожил
 
Регистрация: 13.10.2007
Сообщений: 2,740
По умолчанию

Код:
procedure TForm1.Button1Click(Sender: TObject);
begin
Edit1.text:=FloatToStrF(StrToFloat(Edit2.Text)/StrToFloat(Edit3.Text),ffFixed,5,2);

end;
Вводишь в Edit2 и Edit3 любые числа и в Edit1 получаешь ответ с точносьбю до сотых, если ffFixed,5,3 - до тысячных и т. д.
puporev вне форума Ответить с цитированием
Старый 13.02.2008, 23:59   #6
bles
Пользователь
 
Регистрация: 29.01.2008
Сообщений: 26
По умолчанию

Цитата:
Сообщение от puporev Посмотреть сообщение
Вводишь в Edit2 и Edit3 любые числа и в Edit1 получаешь ответ с точносьбю до сотых, если ffFixed,5,3 - до тысячных и т. д.
Спасибо огромное ,)
bles вне форума Ответить с цитированием
Старый 15.02.2008, 18:53   #7
bles
Пользователь
 
Регистрация: 29.01.2008
Сообщений: 26
По умолчанию

А про pagecontrol1 и tabsheet некто не знает как сделать сделать так, что бы в начале видна была только первая закладка, а при нажатии на кнопку появлялась следующая и у меня они уже должны быть созданы, там много вычисления и на каждой вкладке вычисляется определенная формула.
Если бы с примером было бы просто супер)

И еще не кто не знает как в label делать степень сверху, ставить корень, писать снизу индексы и греческие буквы...

Последний раз редактировалось bles; 15.02.2008 в 18:58.
bles вне форума Ответить с цитированием
Старый 18.02.2008, 08:51   #8
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
как в label делать степень сверху
Код:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;

type
  TForm1 = class(TForm)
    Label1: TLabel;
    procedure Label1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Label1Click(Sender: TObject);
var x:integer;
begin
label1.Caption:=' ';
 x:=0;

Label1.Canvas.TextOut(0,0,'H');
 x:=x+Label1.Canvas.TextExtent('H').cx ;
Label1.Canvas.TextOut(x,10,'2');
 x:=x+Label1.Canvas.TextExtent('2').cx ;
Label1.Canvas.TextOut(x,0,'O');
end;
end.
Цитата:
в начале видна была только первая закладка, а при нажатии на кнопку появлялась следующая
Видимо так:
Код:
procedure TForm1.Button1Click(Sender: TObject);
begin
if PageControl1.Pages[PageControl1.ActivePageIndex+1]<>nil then begin
 PageControl1.Pages[PageControl1.ActivePageIndex+1].Visible:=true;
 PageControl1.ActivePageIndex:=PageControl1.ActivePageIndex+1
end;
end;

procedure TForm1.FormCreate(Sender: TObject);
var i:word;
begin
 //********* FOR ******************
 for i :=1  to PageControl1.PageCount-1  do
 begin
  PageControl1.Pages[i].Visible:=false;
 end;
 //******* END FOR ****************{}
end;
Код:
//********* FOR ******************
for  i:=0  to PageControl1.PageCount-1  do
begin
 PageControl1.Pages[i].Visible:=true;
end;
//******* END FOR ****************{}
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 19.02.2008, 19:46   #9
bles
Пользователь
 
Регистрация: 29.01.2008
Сообщений: 26
По умолчанию

Спасибо большое, попробую,)
bles вне форума Ответить с цитированием
Старый 19.02.2008, 21:53   #10
Sibedir
Тот ещё
Старожил
 
Аватар для Sibedir
 
Регистрация: 14.11.2007
Сообщений: 2,242
По умолчанию

К вопросу об округлении:
Код:
uses
  Math;

function MyRound (A: Extended): Extended;
begin
  if A > 1e25 then Result := A
  else Result := Round (A);
end;

function MyRoundTo (const AValue: Extended; const ADigit: Integer): Extended;
var
  LFactor: Extended;
begin
  LFactor := IntPower(10, ADigit);
  Result := MyRound (AValue / LFactor) * LFactor;
end;

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
var
  r1, r2, r3, r4: Extended;
begin
  r1 := 1.1e4932;
  r2 := 4.5e-4932;
  r3 := 33456.54932;
  r4 := 33456.54932;
  r1 := MyRoundTo (r1, 10);
  r2 := MyRoundTo (r2, -4932);
  r3 := MyRoundTo (r3, 3);
  r4 := MyRoundTo (r4, -3);
  ShowMessage (FloatToStr (r1) + #13 + FloatToStr (r2) + #13 +
               FloatToStr (r3) + #13 + FloatToStr (r4));
end;
MyRound работает как Round, а MyRoundTo сделана по принципу RoundTo, но они исбавлены от ошибок с большими числами.
Sibedir вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
как отрегулировать кол-во знаков после запятой, при выведении числа(delphi) photozaz Общие вопросы Delphi 11 10.02.2011 21:20
кол-во знаков после запятой в TEdit Petrucci Общие вопросы Delphi 9 04.07.2008 13:15
Количество цифр после запятой LIEN БД в Delphi 7 03.07.2008 22:12
for SAS888 please help! макрос выделения цифр жирным шрифтом прописывает числа без нулей после запятой Dorvir Microsoft Office Excel 1 03.03.2008 22:39
Сокращение после запятой Romuald Microsoft Office Excel 21 18.12.2007 10:32