Текущий архив: 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