Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2005.10.09;
Скачать: CL | DM;

Вниз

Целое число или нет   Найти похожие ветки 

 
PIF   (2005-08-29 17:01) [0]

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


 
begin...end ©   (2005-08-29 17:03) [1]

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


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

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


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

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


 
begin...end ©   (2005-08-29 17:25) [4]

> PIF   (29.08.05 17:21) [3]

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

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


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

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


 
begin...end ©   (2005-08-29 17:35) [6]

> 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.

?


 
begin...end ©   (2005-08-29 17:48) [7]

> 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.

?


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

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


 
han_malign ©   (2005-08-29 18:18) [9]

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


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

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


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

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


 
han_malign ©   (2005-08-29 18:30) [12]

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


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

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


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


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

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


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

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


 
begin...end ©   (2005-08-29 19:05) [16]

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

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


 
Anatoly Podgoretsky ©   (2005-08-29 19:19) [17]

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


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

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

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



Страницы: 1 вся ветка

Текущий архив: 2005.10.09;
Скачать: CL | DM;

Наверх




Память: 0.5 MB
Время: 0.027 c
6-1118391561
dDan
2005-06-10 12:19
2005.10.09
Ошибка при Get


1-1127132202
Denned
2005-09-19 16:16
2005.10.09
Drag&amp;Drop в DBGrid


14-1126699563
Daro
2005-09-14 16:06
2005.10.09
Есть такая проблема


14-1126749354
Ученик чародея
2005-09-15 05:55
2005.10.09
Почитал Орешник...


1-1125501595
Dmitrich
2005-08-31 19:19
2005.10.09
Загрузка потока в Excel