Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Целое число или нет [D6, WinXP]


PIF ©   (2005-08-29 17:01:00) 

Здравствуйте!!!
У меня такая проблемма:Есть кусок кода
count:=0;
repeat
VCM:=VCM*10;
count:=count+1;
until
VCM=integer(true);
программа при выполнение данного цикла зависает.
Подскажите пожалуйста что делать.
Заранее благодарен!!!


Юрий Зотов   (2005-08-29 19:41:00) [1]

> begin...end ©   (29.08.05 19:05) [16]

Не сильно, но в лучшую сторону...
:о)


Anatoly Podgoretsky   (2005-08-29 19:19:00) [2]

А надобность подобного действия?
Кроме решения преждллженного ЮЗ и begin...end, остальные не подходит.
операция умножения на 10 могут никогда не закочиться нормально, сколько не умножай.


begin...end   (2005-08-29 19:05:00) [3]

> Юрий Зотов ©   (29.08.05 18:59) [14]

Это сильно отличается от [6]?


PIF   (2005-08-29 19:01:00) [4]

Спасибо всем большое, вы мне очень помогли!!!


Юрий Зотов   (2005-08-29 18:59:00) [5]


function FloatToInt(const X: extended): Int64;
begin
 Result := StrToInt(StringReplace(FloatToStr(X), DecimalSeparator, '', []))
end;

:o)))))))))))))


Александр Иванов   (2005-08-29 18:36:00) [6]

try
 FloatToStr(Edit1.Text);
 Count := -Pos(Edit1.Text,DecimalSeparator);
 if Count<>0 then
   inc(Сount, Length(Edit1.Text));
except
 ShowMassage('Это не число');
end;


han_malign   (2005-08-29 18:30:00) [7]

> А если оно было введено пользователем?
- пользователь вводит строку, при преобразовании к двоичному вещественному с плавающей точкойоно "теряет" точность - скажем 0,3 будет 0,29999999999999999999999999999999999999999999 - с точки зрения математики потеря точности исчезающе мала, а вот с точки зрения определения количества знаков...


Александр Иванов   (2005-08-29 18:24:00) [8]

PIF   (29.08.05 18:22) [10]
Пользователь вводит строку.


PIF   (2005-08-29 18:22:00) [9]

А если оно было введено пользователем?


han_malign   (2005-08-29 18:18:00) [10]

> А как можно узнать сколько знаков после запятой у числа?
- а никак, двоичное вещественноек десятичной дроби приводится с заданной точностью... Точное представление десятичной дроби возможно только в строковом виде - читай про машинное представление вещественных чисел, машинный ноль и т.д.


PIF   (2005-08-29 18:00:00) [11]

А как можно узнать сколько знаков после запятой у числа?


begin...end   (2005-08-29 17:48:00) [12]

> PIF   (29.08.05 17:26) [5]

var
 R: Real;
 I: Integer;
begin
 while Frac(R) <> 0 do
   R := R * 10;
 I := Trunc(R);
 ShowMessage(IntToStr(I))
end.

?


begin...end   (2005-08-29 17:35:00) [13]

> PIF   (29.08.05 17:26) [5]

var
 R: Real;
 I: Integer;
begin
 if TryStrToInt(StringReplace(FloatToStr(R), DecimalSeparator, '', [rfReplaceAll]), I) then
   ShowMessage(IntToStr(I))
end.

?


PIF   (2005-08-29 17:26:00) [14]

Результат болжен быть 1234056


begin...end   (2005-08-29 17:25:00) [15]

> PIF   (29.08.05 17:21) [3]

> мне нужно сделать его целым путем умножения на 10

Что имеется в виду? Например, VCM = 1,234056. Каким должен быть результат?


PIF   (2005-08-29 17:21:00) [16]

VCM-число вещественное, мне нужно сделать его целым путем умножения на 10, как мне лучше это зделать


begin...end   (2005-08-29 17:08:00) [17]

Если же VCM -- вещественное число, и нужно определить, может ли оно рассматриваться как целое, следует сравнить результат Frac(VCM) (это будет дробная часть числа) с некоторой заданной погрешностью определения.


begin...end   (2005-08-29 17:03:00) [18]

Если VCM -- целое, то при любом его значении цикл не закончится, поскольку Integer(True) = 1.


Наверх

Титульная страница Поиск, карта сайта Написать письмо