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

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

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 09.10.2009, 13:54   #1
k1r1ch
ACM!
Форумчанин
 
Аватар для k1r1ch
 
Регистрация: 19.06.2009
Сообщений: 382
Вопрос Определить кол-во знаков после запятой

Как определить кол-во знаков после запятой в числе extended?
k1r1ch вне форума Ответить с цитированием
Старый 09.10.2009, 14:07   #2
lexaltd
Форумчанин
 
Регистрация: 21.07.2008
Сообщений: 192
По умолчанию

Цитата:
Сообщение от k1r1ch Посмотреть сообщение
Как определить кол-во знаков после запятой в числе extended?
Первое что пришло в голову
Код:
procedure TForm1.BitBtn1Click(Sender: TObject);
var
 i : Extended;
 i2 : Integer;
 s : string;
begin
 i := 20.3333;
 s := FloatToStr(i);
 i2 := Length(s) - Pos(',',s);
 ShowMessage( FloatToStr(i2));
end;
lexaltd вне форума Ответить с цитированием
Старый 09.10.2009, 18:36   #3
k1r1ch
ACM!
Форумчанин
 
Аватар для k1r1ch
 
Регистрация: 19.06.2009
Сообщений: 382
Счастье

Огромное спасибо!!!
k1r1ch вне форума Ответить с цитированием
Старый 21.03.2023, 11:18   #4
vseraznoe1@mail.ru
Новичок
Джуниор
 
Регистрация: 20.12.2021
Сообщений: 1
По умолчанию

// пишу больше для себя чтоб потом найти, может каму пригодится
Код:
uses
   math

function PointPosS(s:string; PointDef:integer=0):integer;  
// определить количество знаков после запятой  ('0123.' или '012.3' или '2.9514+E20' или '1,23E-13')
var
   i, p, n:integer;
begin
   try
      p:=0; n:=0;
      result:=length(s);
      for i:=result downto 1 do
         if (s[i]='.') or (s[i]=',') then
            begin
               if p>0 then
                  result:=-(p+n-i)
               else
                  if i=result then
                     result:=0
                  else
                     result:=i-result;
               exit;
            end
         else
            if (s[i]='E') or (s[i]='E') and (i>1) and (result-i>0) then
               if (s[i-1]='-') or (s[i+1]='-') then
                  begin
                     p:=abs(strtoint(copy(s, i+1, result-i)));
                     if (s[i-1]='+') or (s[i-1]='-') then
                        n:=i-2
                     else
                        n:=i-1;
                  end
               else
                  begin
                     result:=0;
                     exit
                  end;
      if p>0 then
         result:=-p
      else
         result:=0;
   except
      result:=PointDef;
   end;
end;

function PointPosE(value:Extended; RoundTo_:integer=-9; PointDef:integer=0):integer; 
// определить количество знаков после запятой (012.3 или 2.9514+E20 или 1,23E-13)
// обязательно укузывайте RoundTo_ хоть приблизительно на 3-6 порядков меньше, хотябы установите -16 
var
   s:string;
begin
   try
      if RoundTo_<0 then
         s:=FloatToStr(Roundto(value, RoundTo_))
      else
         s:=FloatToStr(value);
      result:=PointPosS(s, PointDef);
   except
      result:=PointDef;
   end;
end;

procedure TForm1.Button1Click(Sender: TObject);
var
   value:Extended;
   value1:Double;
begin
   ShowMessage(inttostr(PointPosS('0123.', 0)));
   ShowMessage(inttostr(PointPosS('012.3', 0)));
   
   value1:=123.123456;
   ShowMessage(inttostr(PointPosE(value1, 0)));

   value:=-123.123456;
   ShowMessage(inttostr(PointPosE(value, 0)));

   value:=0.000000000000123;
   ShowMessage(inttostr(PointPosE(value, 0)));
   value:=0.0000000000001;
   ShowMessage(inttostr(PointPosE(value, 0)));
   
   value:=-0.000000000000123;
   ShowMessage(inttostr(PointPosE(value, 0)));
   value:=-0.0000000000001;
   ShowMessage(inttostr(PointPosE(value, 0)));

   value:=1230000000000000000;
   ShowMessage(inttostr(PointPosE(value, 0)));
   value:=10000000000000000;
   ShowMessage(inttostr(PointPosE(value, 0)));
end;
vseraznoe1@mail.ru вне форума Ответить с цитированием
Ответ


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

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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
удаление не нужных знаков после запятой. Alar Общие вопросы Delphi 4 31.05.2012 19:59
как отрегулировать кол-во знаков после запятой, при выведении числа(delphi) photozaz Общие вопросы Delphi 11 10.02.2011 21:20
Определение количества знаков после запятой nec117 Общие вопросы .NET 1 01.10.2009 19:04
кол-во знаков после запятой в TEdit Petrucci Общие вопросы Delphi 9 04.07.2008 13:15
Ограничение знаков после запятой,StringGrid Gorin Компоненты Delphi 9 20.09.2007 16:10