![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Целое число или нет [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.